private static byte[] GetKey(byte[] keyBytes)
{
// 如果密钥不足 16 位,那么就补足
int baseLen = 16;
if ((keyBytes.Length % baseLen) != 0)
{
int groups = (keyBytes.Length / baseLen) + ((keyBytes.Length % baseLen) != 0 ? 1 : 0);
byte[] temp = new byte[groups * baseLen];
// 关键代码 补全
BitConverter.ToInt32(temp, 0);
Array.Copy(keyBytes, 0, temp, 0, keyBytes.Length);
keyBytes = temp;
}
return keyBytes;
}
/// <summary>
/// AES 加密
/// </summary>
/// <param name="str"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string AesEncrypt(string str, string key)
{
if (string.IsNullOrEmpty(str)) return null;
Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
RijndaelManaged rm = new RijndaelManaged
{
Key = GetKey(Encoding.UTF8.GetBytes(key)),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateEncryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
/// <summary>
/// AES 解密
/// </summary>
/// <param name="str"></param>
/// <param name="key"></param>
/// <returns></returns>
public static string AesDecrypt(string str, string key)
{
if (string.IsNullOrEmpty(str)) return null;
Byte[] toEncryptArray = Convert.FromBase64String(str);
RijndaelManaged rm = new RijndaelManaged
{
Key = GetKey(Encoding.UTF8.GetBytes(key)),
Mode = CipherMode.ECB,
Padding = PaddingMode.PKCS7
};
ICryptoTransform cTransform = rm.CreateDecryptor();
Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Encoding.UTF8.GetString(resultArray);
}
C# aes 补全16位key
最新推荐文章于 2024-08-24 14:58:43 发布