加密:
// 使用SHA-256哈希函数处理秘钥
var hashedKey = GetSHA256Hash(publicKey);
// 加密
var encryptString = EncryptStringToBytes_Aes(strs, hashedKey);
static string GetSHA256Hash(string input)
{
using (SHA256 sha256 = SHA256.Create())
{
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hashedBytes = sha256.ComputeHash(inputBytes);
// 取前32字节作为AES算法的秘钥
return Convert.ToBase64String(hashedBytes).Substring(0, 32);
}
}
static string EncryptStringToBytes_Aes(string plainText, string Key)
{
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Encoding.UTF8.GetBytes(Key);
aesAlg.IV = new byte[16];
ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt, Encoding.UTF8))
{
swEncrypt.Write(plainText);
}
return Convert.ToBase64String(msEncrypt.ToArray());
}
}
}
}
解密:
// 使用SHA-256哈希函数处理秘钥
string hashedKey = GetSHA256Hash(publicKey);
var decryptString = DecryptStringFromBytes_Aes(strs, hashedKey);
static string GetSHA256Hash(string input)
{
using (SHA256 sha256 = SHA256.Create())
{
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
byte[] hashedBytes = sha256.ComputeHash(inputBytes);
// 取前32字节作为AES算法的秘钥
return Convert.ToBase64String(hashedBytes).Substring(0, 32);
}
}
static string DecryptStringFromBytes_Aes(string cipherText, string Key)
{
byte[] cipherBytes = Convert.FromBase64String(cipherText);
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Encoding.UTF8.GetBytes(Key);
aesAlg.IV = new byte[16]; // IV应该与加密时生成的IV相同
ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
using (MemoryStream msDecrypt = new MemoryStream(cipherBytes))
{
using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
{
using (StreamReader srDecrypt = new StreamReader(csDecrypt, Encoding.UTF8))
{
return srDecrypt.ReadToEnd();
}
}
}
}
}