直接看代码
/**
* CSharp 版本的 AES 加解密, 返回加密后 base64 编码的结果/解密后的原文:
*
* AES 的 PADDING 为 PKCS7, 对应 JAVA 的 PKCS5Padding,
* MODE 为 CBC/ECB (CBC 模式需要有 IV, ECB 模式不需要 IV)
*/
public class EncrypTool
{
public static string AesEncryptCbc_Base64(string EncryptStr, string key, string iv)
{
try
{
// 这里如果 key 是 base64 编码过的需要先解码一下
// byte[] keyArray = Convert.FromBase64String(Key);
byte[] keyArray = Encoding.UTF8.GetBytes(key);
byte[] ivArray = Encoding.UTF8.GetBytes(iv);
byte[] toEncryptArray = Encoding.UTF8.GetBytes(EncryptStr);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.IV = ivArray;
// CBC 模式需要 IV
rDel.Mode = CipherMode.CBC;
// 对应 JAVA 的 PKCS5Padding,
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
rDel.Dispose();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
catch (Exception ex)
{
Console.WriteLine("exception: " + ex.Message);
return "";
}
}
public static string AesDecryptCbc_Base64(string DecryptStr, string key, string iv)
{
try
{
// 这里如果 key 是 base64 编码过的需要先解码一下
// byte[] keyArray = Convert.FromBase64String(Key);
byte[] keyArray = Encoding.UTF8.GetBytes(key);
byte[] ivArray = Encoding.UTF8.GetBytes(iv);
// 待解密的字符串是 base64 编码过的
byte[] toDecryptArray = Convert.FromBase64String(DecryptStr);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.IV = ivArray;
// CBC 模式需要 IV
rDel.Mode = CipherMode.CBC;
// 对应 JAVA 的 PKCS5Padding,
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toDecryptArray, 0, toDecryptArray.Length);
rDel.Dispose();
return Encoding.UTF8.GetString(resultArray);
}
catch (Exception ex)
{
Console.WriteLine("exception: " + ex.Message);
return "";
}
}
public static string AesEncryptEcb_Base64(string EncryptStr, string key)
{
try
{
// 这里如果 key 是 base64 编码过的需要先解码一下
// byte[] keyArray = Convert.FromBase64String(Key);
byte[] keyArray = Encoding.UTF8.GetBytes(key);
byte[] toEncryptArray = Encoding.UTF8.GetBytes(EncryptStr);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
// ECB 模式不需要 IV
rDel.Mode = CipherMode.ECB;
// 对应 JAVA 的 PKCS5Padding,
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
rDel.Dispose();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
catch (Exception ex)
{
Console.WriteLine("exception: " + ex.Message);
return "";
}
}
public static string AesDecryptEcb_Base64(string DecryptStr, string key)
{
try
{
// 这里如果 key 是 base64 编码过的需要先解码一下
// byte[] keyArray = Convert.FromBase64String(Key);
byte[] keyArray = Encoding.UTF8.GetBytes(key);
// 待解密的字符串是 base64 编码过的
byte[] toDecryptArray = Convert.FromBase64String(DecryptStr);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
// ECB 模式不需要 IV
rDel.Mode = CipherMode.ECB;
// 对应 JAVA 的 PKCS5Padding,
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toDecryptArray, 0, toDecryptArray.Length);
rDel.Dispose();
return Encoding.UTF8.GetString(resultArray);
}
catch (Exception ex)
{
Console.WriteLine("exception: " + ex.Message);
return "";
}
}
}
网友评论