/// <summary>
/// AES加密算法
/// </summary>
/// <param name="toEncrypt">加密字符串</param>
/// <param name="sKey">密钥</param>
/// <returns></returns>
public static string AESEncrypt(string toEncrypt, string sKey)
{
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = GetLegalKey(sKey);
rDel.IV = GetLegalIV(sKey);
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
cTransform.Dispose();
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}
/// <summary>
/// AES解密算法
/// </summary>
/// <param name="toDecrypt">解密字符串</param>
/// <param name="sKey">密钥</param>
/// <returns></returns>
public static string AESDecrypt(string toDecrypt, string sKey)
{
string toD = "";
int len = toDecrypt.Length;
if (len % 4 == 0)
toD = toDecrypt;
else
toD = toDecrypt.PadRight((len + 4 - len % 4), '+');
byte[] toEncryptArray = Convert.FromBase64String(toD);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = GetLegalKey(sKey);
rDel.IV = GetLegalIV(sKey);
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
try
{
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
cTransform.Dispose();
return UTF8Encoding.UTF8.GetString(resultArray);
}
catch
{
return "密钥错误!";
}
}
/// <summary>
/// 获得密钥
/// </summary>
/// <param name="Key"></param>
/// <returns></returns>
public static byte[] GetLegalKey(string Key)
{
SymmetricAlgorithm mobjCryptoService = new RijndaelManaged();
string sTemp = Key;
mobjCryptoService.GenerateKey();
byte[] bytTemp = mobjCryptoService.Key;
int KeyLength = bytTemp.Length;
if (sTemp.Length > KeyLength)
sTemp = sTemp.Substring(0, KeyLength);
else if (sTemp.Length < KeyLength)
sTemp = sTemp.PadRight(KeyLength, ' ');
return ASCIIEncoding.ASCII.GetBytes(sTemp);
}
public static byte[] GetLegalIV(string IV)
{
SymmetricAlgorithm mobjCryptoService = new RijndaelManaged();
string sTemp = IV;
mobjCryptoService.GenerateIV();
byte[] bytTemp = mobjCryptoService.IV;
int IVLength = bytTemp.Length;
if (sTemp.Length > IVLength)
sTemp = sTemp.Substring(0, IVLength);
else if (sTemp.Length < IVLength)
sTemp = sTemp.PadRight(IVLength, ' ');
return UTF8Encoding.UTF8.GetBytes(sTemp);
}