在使用AES128算法加密时,报错。
关键还是key的长度,一般是16进制的32个字符的字符串,需要先转字节数组后再设置KEY值。
aes.Key = HexStringToByteArray(key);// Encoding.UTF8.GetBytes(key);
aes.IV = new byte[16]; // 对于AES128,IV长度为16字节
public static byte[] HexStringToByteArray(string hexString)
{
// 移除字符串中的所有空格
hexString = hexString.Replace(" ", "");
// 确保字符串长度为偶数
if (hexString.Length % 2 != 0)
{
throw new ArgumentException("Hex string must have an even number of characters.");
}
// 初始化字节数组
byte[] bytes = new byte[hexString.Length / 2];
// 遍历字符串,每次处理两个字符(一个字节)
for (int i = 0; i < hexString.Length; i += 2)
{
// 将两个字符转换为字节
bytes[i / 2] = Convert.ToByte(hexString.Substring(i, 2), 16);
}
return bytes;
}
static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
{
byte[] encrypted;
using (Aes aesAlg = Aes.Create())
{
aesAlg.Key = Key;
aesAlg.IV = IV;
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))
{
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}
}
return encrypted;
}