using System; using System.Collections; using System.Collections.Generic; using System.Security.Cryptography; using System.Text; using UnityEngine; namespace WZ { public static class EncryptionUtils { private static string GetKey(string packageName) { var keyBytes = Encoding.UTF8.GetBytes(packageName); byte[] keyHash; using (var md5 = MD5.Create()) { keyHash = md5.ComputeHash(keyBytes); } return BitConverter.ToString(keyHash).Replace("-", "").ToUpper(); } // Aes 加密 public static string AesEncrypt(string packageName, string content) { string key = GetKey(packageName); var contentBytes = Encoding.UTF8.GetBytes(content); var keyBytes = Encoding.UTF8.GetBytes(key); byte[] keyHash; using (var md5 = MD5.Create()) { keyHash = md5.ComputeHash(keyBytes); } using var aesAlg = Aes.Create(); aesAlg.Key = keyHash; aesAlg.Mode = CipherMode.ECB; aesAlg.Padding = PaddingMode.PKCS7; var encryptor = aesAlg.CreateEncryptor(); var encryptedBytes = encryptor.TransformFinalBlock(contentBytes, 0, contentBytes.Length); return BitConverter.ToString(encryptedBytes).Replace("-", "").ToLower(); } // Aes 解密 public static string AesDecrypt(string packageName, string encrypted) { string key = GetKey(packageName); var keyBytes = Encoding.UTF8.GetBytes(key); var encryptedBytes = new byte[encrypted.Length / 2]; for (var i = 0; i < encryptedBytes.Length; i++) { encryptedBytes[i] = Convert.ToByte(encrypted.Substring(i * 2, 2), 16); } // 使用传统的MD5创建方式 byte[] keyHash; using (var md5 = MD5.Create()) { keyHash = md5.ComputeHash(keyBytes); } using var aesAlg = Aes.Create(); aesAlg.Key = keyHash; aesAlg.Mode = CipherMode.ECB; aesAlg.Padding = PaddingMode.PKCS7; var decryptor = aesAlg.CreateDecryptor(); var decryptedBytes = decryptor.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length); return Encoding.UTF8.GetString(decryptedBytes); } } }