2025-10-17 12:20:03 +08:00
|
|
|
|
using System;
|
2025-05-22 18:57:44 +08:00
|
|
|
|
using System.Collections.Generic;
|
2025-05-12 16:56:34 +08:00
|
|
|
|
using System.IO;
|
|
|
|
|
|
using System.Text;
|
2025-05-22 18:57:44 +08:00
|
|
|
|
using Framework;
|
2025-04-29 18:45:52 +08:00
|
|
|
|
using Gameplay.UI.Common;
|
2025-05-26 13:20:31 +08:00
|
|
|
|
using Gameplay.Unit.Data;
|
2025-05-12 19:19:13 +08:00
|
|
|
|
using PhxhSDK.AOT;
|
2025-05-12 16:56:34 +08:00
|
|
|
|
using PhxhSDK.AOT.Encrypt;
|
2025-05-07 17:35:43 +08:00
|
|
|
|
using PhxhSDK.AOT.PreConfig;
|
2024-01-23 13:58:40 +08:00
|
|
|
|
using UnityEditor;
|
2025-04-29 18:45:52 +08:00
|
|
|
|
using UnityEngine;
|
2025-05-12 19:19:13 +08:00
|
|
|
|
using UnityFS;
|
2025-10-17 12:20:03 +08:00
|
|
|
|
using Object = UnityEngine.Object;
|
2024-01-23 13:58:40 +08:00
|
|
|
|
|
|
|
|
|
|
public class TestCode: Editor
|
|
|
|
|
|
{
|
2025-05-22 18:57:44 +08:00
|
|
|
|
|
2025-08-11 16:23:50 +08:00
|
|
|
|
// [MenuItem("GameObject/LTTest/检查材质路径", false, 0)]
|
|
|
|
|
|
public static void Test6()
|
|
|
|
|
|
{
|
|
|
|
|
|
Object selectObj = Selection.activeObject;
|
|
|
|
|
|
if (null == selectObj)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.Log("尚未选择任何对象");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
var selectGo = selectObj as GameObject;
|
|
|
|
|
|
if (selectGo == null)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.Log("选择的对象不是GameObject类型");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
var render = selectGo.GetComponent<Renderer>();
|
|
|
|
|
|
var materials = render.sharedMaterials;
|
|
|
|
|
|
if (materials == null || materials.Length == 0)
|
|
|
|
|
|
{
|
|
|
|
|
|
DebugUtil.LogError("渲染器没有材质:" + selectGo.name);
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
foreach (var mat in materials)
|
|
|
|
|
|
{
|
|
|
|
|
|
var materialPath = AssetDatabase.GetAssetPath(mat);
|
|
|
|
|
|
DebugUtil.LogError("材质路径:" + materialPath);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-01-27 17:57:06 +08:00
|
|
|
|
[MenuItem("Test/测试float转int")]
|
|
|
|
|
|
public static void Test7()
|
|
|
|
|
|
{
|
|
|
|
|
|
var checkStr = "50000410";
|
|
|
|
|
|
var floatVal = float.Parse(checkStr);
|
|
|
|
|
|
DebugUtil.LogError("floatVal:" + floatVal);
|
|
|
|
|
|
var intVal = (int)floatVal;
|
|
|
|
|
|
DebugUtil.LogError("intVal from float:" + intVal);
|
|
|
|
|
|
|
|
|
|
|
|
var doubleVal = double.Parse(checkStr);
|
|
|
|
|
|
DebugUtil.LogError("doubleVal:" + doubleVal);
|
|
|
|
|
|
var intVal2 = (int)doubleVal;
|
|
|
|
|
|
DebugUtil.LogError("intVal from double:" + intVal2);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-08-11 16:23:50 +08:00
|
|
|
|
// [MenuItem("Test/测试")]
|
2025-05-26 13:20:31 +08:00
|
|
|
|
public static void Test5()
|
|
|
|
|
|
{
|
2025-06-09 16:30:26 +08:00
|
|
|
|
var checkPath = "Art/Grass01/FlowerGroup_2 (8)";
|
|
|
|
|
|
var findObj = GameObjectEx.FindEx(checkPath);
|
|
|
|
|
|
DebugUtil.LogError("查找对象:" + checkPath + " 是否存在:" + (findObj != null));
|
2025-05-26 13:20:31 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// [MenuItem("Test/测试")]
|
2025-05-22 18:57:44 +08:00
|
|
|
|
public static void Test4()
|
|
|
|
|
|
{
|
|
|
|
|
|
var dataSkill = EditorTableManager.instance.tables.SkillConfig.DataList[0];
|
|
|
|
|
|
var cloneSkill = dataSkill.Clone();
|
|
|
|
|
|
cloneSkill.ReferIds.Add(100);
|
|
|
|
|
|
DebugUtil.LogError("refer equal:" + (dataSkill == cloneSkill));
|
|
|
|
|
|
DebugUtil.LogError("技能ID:" + dataSkill.ID + " cloneSkillID:" + cloneSkill.ID);
|
|
|
|
|
|
DebugUtil.LogError("referIds:" + dataSkill.ReferIds.Count + " cloneReferIds:" + cloneSkill.ReferIds.Count);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// [MenuItem("Test/测试")]
|
|
|
|
|
|
public static void Test3()
|
|
|
|
|
|
{
|
|
|
|
|
|
var testList = new List<int>();
|
|
|
|
|
|
for (int i = 0; i < 100; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
testList.Add(i);
|
|
|
|
|
|
}
|
|
|
|
|
|
var jsonStr = LitJson.JsonMapper.ToJson(testList);
|
|
|
|
|
|
Debug.LogError(jsonStr);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-10-17 12:20:03 +08:00
|
|
|
|
// [MenuItem("Test/测试加密2")]
|
2025-05-12 18:34:09 +08:00
|
|
|
|
public static void Test2()
|
|
|
|
|
|
{
|
2025-10-17 12:20:03 +08:00
|
|
|
|
var path = "C:\\Users\\82158\\Desktop\\加密测试\\server.Dev.0.1.0.xml";
|
|
|
|
|
|
|
|
|
|
|
|
var loadBytes = File.ReadAllBytes(path);
|
|
|
|
|
|
var loadStr = Encoding.UTF8.GetString(loadBytes);
|
|
|
|
|
|
Debug.LogError("原始数据(字符串):" + loadStr);
|
|
|
|
|
|
// 输出bytes内容
|
|
|
|
|
|
var sb = new StringBuilder();
|
|
|
|
|
|
for (int i = 0; i < loadBytes.Length; i++)
|
2025-05-12 18:34:09 +08:00
|
|
|
|
{
|
2025-10-17 12:20:03 +08:00
|
|
|
|
sb.Append(loadBytes[i].ToString("X") + ",");
|
2025-05-12 18:34:09 +08:00
|
|
|
|
}
|
2025-10-17 12:20:03 +08:00
|
|
|
|
Debug.LogError("原始数据(字节):" + sb.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
var encodeBytes = PreConfig.EncodeBytes(loadBytes);
|
|
|
|
|
|
// 写入新文件
|
|
|
|
|
|
var savePath = "C:\\Users\\82158\\Desktop\\加密测试\\server.Dev.0.1.0_encrypt.xml";
|
|
|
|
|
|
File.WriteAllBytes(savePath, encodeBytes);
|
|
|
|
|
|
Debug.LogError("加密后数据长度:" + encodeBytes.Length);
|
|
|
|
|
|
// 输出加密后bytes内容
|
|
|
|
|
|
sb.Clear();
|
|
|
|
|
|
for (int i = 0; i < encodeBytes.Length; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
sb.Append(encodeBytes[i].ToString("X") + ",");
|
|
|
|
|
|
}
|
|
|
|
|
|
Debug.LogError("加密后数据(字节):" + sb.ToString());
|
|
|
|
|
|
var forceStr = Encoding.UTF8.GetString(encodeBytes);
|
|
|
|
|
|
Debug.LogError("加密后数据(字符串):" + forceStr);
|
|
|
|
|
|
|
|
|
|
|
|
var decodeStr = PreConfig.DecodeBytes(encodeBytes);
|
|
|
|
|
|
Debug.LogError("解密后数据:" + decodeStr);
|
|
|
|
|
|
|
|
|
|
|
|
// 对比
|
|
|
|
|
|
var isSame = loadStr.Equals(decodeStr);
|
|
|
|
|
|
Debug.LogError("对比结果:" + isSame);
|
2025-05-12 18:34:09 +08:00
|
|
|
|
}
|
2025-11-04 12:39:47 +08:00
|
|
|
|
|
|
|
|
|
|
[MenuItem("Test/测试LocalInfoEncrypt加密解密")]
|
|
|
|
|
|
public static void TestLocalInfoEncrypt()
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.Log("========== 开始测试 LocalInfoEncrypt 加密解密功能 ==========");
|
|
|
|
|
|
|
|
|
|
|
|
// 测试1: 基础字节数组加密解密
|
|
|
|
|
|
Debug.Log("\n【测试1】基础字节数组加密解密:");
|
|
|
|
|
|
var testData1 = "Hello World! 这是测试数据 123456";
|
|
|
|
|
|
var originalBytes1 = Encoding.UTF8.GetBytes(testData1);
|
|
|
|
|
|
Debug.Log($"原始数据: {testData1}");
|
|
|
|
|
|
Debug.Log($"原始字节长度: {originalBytes1.Length}");
|
|
|
|
|
|
|
|
|
|
|
|
var encryptedBytes1 = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.Encrypt(originalBytes1);
|
|
|
|
|
|
Debug.Log($"加密后字节长度: {encryptedBytes1.Length}");
|
|
|
|
|
|
|
|
|
|
|
|
var decryptedBytes1 = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.Decrypt(encryptedBytes1, out bool isEncrypted1);
|
|
|
|
|
|
var decryptedData1 = Encoding.UTF8.GetString(decryptedBytes1);
|
|
|
|
|
|
Debug.Log($"解密后数据: {decryptedData1}");
|
|
|
|
|
|
Debug.Log($"是否加密: {isEncrypted1}");
|
|
|
|
|
|
Debug.Log($"测试1结果: {(testData1 == decryptedData1 ? "✓ 成功" : "✗ 失败")}");
|
|
|
|
|
|
|
|
|
|
|
|
// 测试2: JSON数据加密解密
|
|
|
|
|
|
Debug.Log("\n【测试2】JSON数据加密解密:");
|
|
|
|
|
|
var testJson = "{\"name\":\"测试\",\"value\":123,\"flag\":true}";
|
|
|
|
|
|
var originalBytes2 = Encoding.UTF8.GetBytes(testJson);
|
|
|
|
|
|
Debug.Log($"原始JSON: {testJson}");
|
|
|
|
|
|
|
|
|
|
|
|
var encryptedBytes2 = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.Encrypt(originalBytes2);
|
|
|
|
|
|
var decryptedBytes2 = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.Decrypt(encryptedBytes2, out bool isEncrypted2);
|
|
|
|
|
|
var decryptedJson = Encoding.UTF8.GetString(decryptedBytes2);
|
|
|
|
|
|
Debug.Log($"解密后JSON: {decryptedJson}");
|
|
|
|
|
|
Debug.Log($"是否有效JSON: {PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.IsValidJson(decryptedBytes2)}");
|
|
|
|
|
|
Debug.Log($"测试2结果: {(testJson == decryptedJson ? "✓ 成功" : "✗ 失败")}");
|
|
|
|
|
|
|
|
|
|
|
|
// 测试3: Base64字符串加密解密
|
|
|
|
|
|
Debug.Log("\n【测试3】Base64字符串加密解密:");
|
|
|
|
|
|
var testString3 = "{\"test\":\"base64加密测试\",\"number\":999}";
|
|
|
|
|
|
Debug.Log($"原始字符串: {testString3}");
|
|
|
|
|
|
|
|
|
|
|
|
var encryptedBase64 = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.EncryptToBase64(testString3);
|
|
|
|
|
|
Debug.Log($"加密后Base64长度: {encryptedBase64.Length}");
|
|
|
|
|
|
|
|
|
|
|
|
var decryptedString3 = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.DecryptFromBase64(encryptedBase64);
|
|
|
|
|
|
Debug.Log($"解密后字符串: {decryptedString3}");
|
|
|
|
|
|
Debug.Log($"测试3结果: {(testString3 == decryptedString3 ? "✓ 成功" : "✗ 失败")}");
|
|
|
|
|
|
|
|
|
|
|
|
// 测试4: 明文数据兼容性测试
|
|
|
|
|
|
Debug.Log("\n【测试4】明文数据兼容性测试:");
|
|
|
|
|
|
var plainJson = "{\"plain\":\"明文数据\",\"encrypted\":false}";
|
|
|
|
|
|
var plainBytes = Encoding.UTF8.GetBytes(plainJson);
|
|
|
|
|
|
Debug.Log($"明文数据: {plainJson}");
|
|
|
|
|
|
|
|
|
|
|
|
var decryptedPlainBytes = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.Decrypt(plainBytes, out bool isEncrypted4);
|
|
|
|
|
|
var decryptedPlainJson = Encoding.UTF8.GetString(decryptedPlainBytes);
|
|
|
|
|
|
Debug.Log($"解密后数据: {decryptedPlainJson}");
|
|
|
|
|
|
Debug.Log($"是否识别为加密: {isEncrypted4}");
|
|
|
|
|
|
Debug.Log($"测试4结果: {(plainJson == decryptedPlainJson && !isEncrypted4 ? "✓ 成功" : "✗ 失败")}");
|
|
|
|
|
|
|
|
|
|
|
|
// 测试5: 大数据加密解密
|
|
|
|
|
|
Debug.Log("\n【测试5】大数据加密解密:");
|
|
|
|
|
|
var largeData = new StringBuilder();
|
|
|
|
|
|
for (int i = 0; i < 1000; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
largeData.Append($"Line{i}:这是第{i}行测试数据,包含中英文和数字123456789;");
|
|
|
|
|
|
}
|
|
|
|
|
|
var largeDataStr = largeData.ToString();
|
|
|
|
|
|
var originalBytes5 = Encoding.UTF8.GetBytes(largeDataStr);
|
|
|
|
|
|
Debug.Log($"大数据原始长度: {originalBytes5.Length} 字节");
|
|
|
|
|
|
|
|
|
|
|
|
var encryptedBytes5 = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.Encrypt(originalBytes5);
|
|
|
|
|
|
Debug.Log($"加密后长度: {encryptedBytes5.Length} 字节");
|
|
|
|
|
|
|
|
|
|
|
|
var decryptedBytes5 = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.Decrypt(encryptedBytes5, out bool isEncrypted5);
|
|
|
|
|
|
var decryptedLargeData = Encoding.UTF8.GetString(decryptedBytes5);
|
|
|
|
|
|
Debug.Log($"解密后长度: {decryptedBytes5.Length} 字节");
|
|
|
|
|
|
Debug.Log($"测试5结果: {(largeDataStr == decryptedLargeData ? "✓ 成功" : "✗ 失败")}");
|
|
|
|
|
|
|
|
|
|
|
|
Debug.Log("\n========== LocalInfoEncrypt 测试完成 ==========");
|
|
|
|
|
|
|
|
|
|
|
|
EditorUtility.DisplayDialog("测试完成", "LocalInfoEncrypt加密解密测试已完成,请查看控制台日志", "确定");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
[MenuItem("Test/本地信息解密")]
|
|
|
|
|
|
public static void FakeDecryptTest()
|
|
|
|
|
|
{
|
|
|
|
|
|
// 输入文件路径
|
|
|
|
|
|
var inputPath = @"C:\Users\82158\Downloads\DeobfuscateStackTrace\net8.0\LocalInfo.bytes";
|
|
|
|
|
|
// 输出文件路径
|
|
|
|
|
|
var outputPath = @"C:\Users\82158\Downloads\DeobfuscateStackTrace\net8.0\Decrypt_LocalInfo.json";
|
|
|
|
|
|
|
|
|
|
|
|
try
|
|
|
|
|
|
{
|
|
|
|
|
|
// 检查输入文件是否存在
|
|
|
|
|
|
if (!File.Exists(inputPath))
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"输入文件不存在: {inputPath}");
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 读取加密数据
|
|
|
|
|
|
var encryptedBytes = File.ReadAllBytes(inputPath);
|
|
|
|
|
|
Debug.Log($"读取加密数据,长度: {encryptedBytes.Length} 字节");
|
|
|
|
|
|
|
|
|
|
|
|
// 输出前20个字节用于调试
|
|
|
|
|
|
var headerInfo = new StringBuilder();
|
|
|
|
|
|
headerInfo.Append("文件头部字节 (前20字节): ");
|
|
|
|
|
|
for (int i = 0; i < Math.Min(20, encryptedBytes.Length); i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
headerInfo.Append($"{encryptedBytes[i]:X2} ");
|
|
|
|
|
|
}
|
|
|
|
|
|
Debug.Log(headerInfo.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
// 检查是否有加密标识头 (NLDE = 0x4E, 0x4C, 0x44, 0x45)
|
|
|
|
|
|
if (encryptedBytes.Length >= 4)
|
|
|
|
|
|
{
|
|
|
|
|
|
var hasHeader = encryptedBytes[0] == 0x4E && encryptedBytes[1] == 0x4C &&
|
|
|
|
|
|
encryptedBytes[2] == 0x44 && encryptedBytes[3] == 0x45;
|
|
|
|
|
|
Debug.Log($"是否包含加密标识头 (NLDE): {hasHeader}");
|
|
|
|
|
|
if (hasHeader && encryptedBytes.Length >= 5)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.Log($"加密版本号: {encryptedBytes[4]:X2}");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
// 使用LocalInfoEncrypt.Decrypt进行解密
|
|
|
|
|
|
var decryptedBytes = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.Decrypt(encryptedBytes, out bool isEncrypted);
|
|
|
|
|
|
Debug.Log($"解密完成,数据长度: {decryptedBytes.Length} 字节,是否加密: {isEncrypted}");
|
|
|
|
|
|
|
|
|
|
|
|
// 输出解密后前100个字节
|
|
|
|
|
|
var decryptedPreview = new StringBuilder();
|
|
|
|
|
|
decryptedPreview.Append("解密后数据预览 (前100字节): ");
|
|
|
|
|
|
for (int i = 0; i < Math.Min(100, decryptedBytes.Length); i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
if (decryptedBytes[i] >= 32 && decryptedBytes[i] <= 126)
|
|
|
|
|
|
decryptedPreview.Append((char)decryptedBytes[i]);
|
|
|
|
|
|
else
|
|
|
|
|
|
decryptedPreview.Append($"[{decryptedBytes[i]:X2}]");
|
|
|
|
|
|
}
|
|
|
|
|
|
Debug.Log(decryptedPreview.ToString());
|
|
|
|
|
|
|
|
|
|
|
|
// 转换为字符串(假设是JSON格式)
|
|
|
|
|
|
var jsonString = Encoding.UTF8.GetString(decryptedBytes);
|
|
|
|
|
|
Debug.Log($"解密后的JSON数据 (前500字符):\n{jsonString.Substring(0, Math.Min(500, jsonString.Length))}");
|
|
|
|
|
|
|
|
|
|
|
|
// 验证是否为有效JSON
|
|
|
|
|
|
bool isValidJson = PhxhSDK.AOT.VersionUpdate.LocalInfoEncrypt.IsValidJson(decryptedBytes);
|
|
|
|
|
|
Debug.Log($"是否为有效JSON: {isValidJson}");
|
|
|
|
|
|
|
|
|
|
|
|
// 保存到新文件中
|
|
|
|
|
|
File.WriteAllBytes(outputPath + ".bytes", decryptedBytes); // 同时保存字节文件
|
|
|
|
|
|
File.WriteAllText(outputPath, jsonString, Encoding.UTF8);
|
|
|
|
|
|
Debug.Log($"解密后的数据已保存到: {outputPath}");
|
|
|
|
|
|
Debug.Log($"同时保存字节文件到: {outputPath}.bytes");
|
|
|
|
|
|
|
|
|
|
|
|
// 成功提示
|
|
|
|
|
|
if (isValidJson)
|
|
|
|
|
|
{
|
|
|
|
|
|
EditorUtility.DisplayDialog("解密成功", $"文件已成功解密并保存到:\n{outputPath}\n\n数据是有效的JSON格式", "确定");
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
EditorUtility.DisplayDialog("解密警告", $"文件已解密并保存到:\n{outputPath}\n\n但数据可能不是有效的JSON格式,请检查", "确定");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
catch (Exception ex)
|
|
|
|
|
|
{
|
|
|
|
|
|
Debug.LogError($"解密失败: {ex.Message}\n{ex.StackTrace}");
|
|
|
|
|
|
EditorUtility.DisplayDialog("解密失败", $"解密过程中出现错误:\n{ex.Message}", "确定");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-05-12 18:34:09 +08:00
|
|
|
|
|
2025-11-03 14:46:25 +08:00
|
|
|
|
[MenuItem("Test/测试加密")]
|
2024-01-23 13:58:40 +08:00
|
|
|
|
public static void Test()
|
|
|
|
|
|
{
|
2025-10-15 13:01:54 +08:00
|
|
|
|
|
|
|
|
|
|
LTSimpleKey.InitKeys();
|
|
|
|
|
|
LTSimpleEncrypt.InitAES(LTSimpleKey.key1, LTSimpleKey.key2);
|
|
|
|
|
|
|
2025-05-12 16:56:34 +08:00
|
|
|
|
var pathParent = "C:/Users/82158/Documents/WXWork/1688856871498430/Cache/File/2025-05";
|
|
|
|
|
|
var srcName = "defaultpackage_assets_hotupdatedlls_hotupdatedll.bundle";
|
|
|
|
|
|
|
|
|
|
|
|
var loadSrcBytes = File.ReadAllBytes(pathParent + "/" + srcName);
|
2025-11-03 14:46:25 +08:00
|
|
|
|
var key3 = System.Text.Encoding.UTF8.GetBytes(Hash128.Compute(srcName).ToString());
|
2025-10-15 13:01:54 +08:00
|
|
|
|
|
2025-11-03 14:46:25 +08:00
|
|
|
|
var encryptBytes = LTSimpleEncrypt.EncryptBytes(key3, loadSrcBytes);
|
|
|
|
|
|
|
|
|
|
|
|
var decryptBytesTest = new byte[loadSrcBytes.Length];
|
|
|
|
|
|
for (int i = 0; i < encryptBytes.Length; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var encryptByte = encryptBytes[i];
|
|
|
|
|
|
var decryptByte = LTSimpleEncrypt.DecryptByte(encryptByte, key3, i);
|
|
|
|
|
|
decryptBytesTest[i] = decryptByte;
|
|
|
|
|
|
}
|
|
|
|
|
|
var isSameTest = true;
|
2025-05-12 16:56:34 +08:00
|
|
|
|
for (int i = 0; i < loadSrcBytes.Length; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var loadSrcByte = loadSrcBytes[i];
|
2025-11-03 14:46:25 +08:00
|
|
|
|
var decryptByte = decryptBytesTest[i];
|
2025-05-12 16:56:34 +08:00
|
|
|
|
if (loadSrcByte != decryptByte)
|
|
|
|
|
|
{
|
2025-11-03 14:46:25 +08:00
|
|
|
|
isSameTest = false;
|
2025-05-12 16:56:34 +08:00
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
2025-11-03 14:46:25 +08:00
|
|
|
|
Debug.LogError("单字节解密测试结果:" + isSameTest);
|
2025-05-07 17:35:43 +08:00
|
|
|
|
|
2025-11-03 14:46:25 +08:00
|
|
|
|
// 把加密后的数据写入到一个新文件中
|
|
|
|
|
|
var saveName = "encrypt_" + srcName;
|
|
|
|
|
|
var savePath = pathParent + "/" + saveName;
|
|
|
|
|
|
File.WriteAllBytes(savePath, encryptBytes);
|
|
|
|
|
|
|
|
|
|
|
|
using (var customFs = new CustomFileStream(savePath, key3))
|
2025-10-15 16:48:50 +08:00
|
|
|
|
{
|
2025-11-03 14:46:25 +08:00
|
|
|
|
// 测试1: 传统测试 - 从头读取完整文件
|
|
|
|
|
|
var decryptBytes = new byte[loadSrcBytes.Length];
|
|
|
|
|
|
customFs.Read(decryptBytes, 0, decryptBytes.Length);
|
|
|
|
|
|
|
|
|
|
|
|
var isSame = true;
|
|
|
|
|
|
for (int i = 0; i < loadSrcBytes.Length; i++)
|
2025-10-15 16:48:50 +08:00
|
|
|
|
{
|
2025-11-03 14:46:25 +08:00
|
|
|
|
var loadSrcByte = loadSrcBytes[i];
|
|
|
|
|
|
var decryptByte = decryptBytes[i];
|
|
|
|
|
|
if (loadSrcByte != decryptByte)
|
|
|
|
|
|
{
|
|
|
|
|
|
isSame = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Debug.LogError("传统测试结果:" + isSame);
|
|
|
|
|
|
|
|
|
|
|
|
// 测试2: Seek测试 - 先读取后一半(通过seek),再读取前一半,拼到一起
|
|
|
|
|
|
customFs.Seek(loadSrcBytes.Length / 2, SeekOrigin.Begin);
|
|
|
|
|
|
var decryptBytes2 = new byte[loadSrcBytes.Length];
|
|
|
|
|
|
var readLen2 = customFs.Read(decryptBytes2, loadSrcBytes.Length / 2, loadSrcBytes.Length / 2);
|
|
|
|
|
|
customFs.Seek(0, SeekOrigin.Begin);
|
|
|
|
|
|
var readLen1 = customFs.Read(decryptBytes2, 0, loadSrcBytes.Length / 2);
|
|
|
|
|
|
Debug.LogError("读取长度:" + readLen1 + " , " + readLen2);
|
|
|
|
|
|
|
|
|
|
|
|
isSame = true;
|
|
|
|
|
|
for (int i = 0; i < loadSrcBytes.Length; i++)
|
|
|
|
|
|
{
|
|
|
|
|
|
var loadSrcByte = loadSrcBytes[i];
|
|
|
|
|
|
var decryptByte = decryptBytes2[i];
|
|
|
|
|
|
if (loadSrcByte != decryptByte)
|
|
|
|
|
|
{
|
|
|
|
|
|
isSame = false;
|
|
|
|
|
|
break;
|
|
|
|
|
|
}
|
2025-10-15 16:48:50 +08:00
|
|
|
|
}
|
2025-11-03 14:46:25 +08:00
|
|
|
|
Debug.LogError("Seek测试结果:" + isSame);
|
2025-10-15 16:48:50 +08:00
|
|
|
|
}
|
2024-01-23 13:58:40 +08:00
|
|
|
|
}
|
|
|
|
|
|
}
|