以下是C#版本代码:
///<summary>
/// DES加密、解密帮助类
/// </summary>
///
public class MoocAESEncrypt
{
private static char[] BcdLookup = { ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’, ‘a’, ‘b’, ‘c’, ‘d’, ‘e’, ‘f’ };
#region AES加密
/// <summary>
/// AES加密
/// </summary>
/// <param name=”toEncrypt“>要加密的内容</param>
/// <param name=”strKey“>密钥(16或者32位)</param>
/// <returns>Base64转码后的密文</returns>
public static string Encrypt(string toEncrypt, string strKey)
{
byte[] keyArray = HexStrToBytes(strKey);
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toEncrypt);
RijndaelManaged rDel = new RijndaelManaged();//using System.Security.Cryptography;
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;//using System.Security.Cryptography;
rDel.Padding = PaddingMode.PKCS7;//using System.Security.Cryptography;
ICryptoTransform cTransform = rDel.CreateEncryptor();//using System.Security.Cryptography;
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return BytesToHexStr(resultArray); //返回十六进制数据;
}
#endregion AES加密
#region AES解密
/// <summary>
/// AES解密
/// </summary>
/// <param name=”toDecrypt“>要解密的内容</param>
/// <param name=”strKey“>密钥(16或者32位)</param>
/// <returns>解密后的明文</returns>
public static string Decrypt(string toDecrypt, string strKey)
{
byte[] keyArray = HexStrToBytes(strKey);
byte[] toEncryptArray = HexStrToBytes(toDecrypt); //16进制to byte[];
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return UTF8Encoding.UTF8.GetString(resultArray);
}
#endregion AES解密
#region 转码
/**
* 将16进制字符串还原为字节数组.
*/
public static byte[] HexStrToBytes(string s)
{
byte[] bytes;
bytes = new byte[s.Length / 2];
for (int i = 0; i < bytes.Length; i++)
{
bytes[i] = (byte)Convert.ToInt32(s.Substring(2 * i,2),16);
}
return bytes;
}
/**
* 将字节数组转换为16进制字符串的形式.
*/
public static string BytesToHexStr(byte[] bcd)
{
StringBuilder s = new StringBuilder(bcd.Length * 2);
for (int i = 0; i < bcd.Length; i++)
{
s.Append(BcdLookup[(bcd[i] >> 4) & 0x0f]);
s.Append(BcdLookup[bcd[i] & 0x0f]);
}
return s.ToString();
}
#endregion
}