SDK_UnityMoney/Assets/Script/Utils/EncryptionUtils.cs

70 lines
2.4 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;
namespace SDK.Utils
{
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);
}
}
}