加密主要使用 AEC 加密方式,采用 CBC 的加密模式。 AES(高级加密标准)加密,是下一代的加密算法标准,具有速度快,安全级别高等特点。在.net中,目前 AES 标准的一个实现是 Rijndael 算法。
代码如下:
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
public class EncryptTools
{
private static string AES_KEY = "abc123456789asfd"; // 可以是16/24/32位
private static string AES_IV = "gsf4jvkyhye57k8O";
/// <summary>
/// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)
/// </summary>
/// <param name="EncryptString">待加密密文</param>
public static string AESEncrypt(string EncryptString)
{
return Encoding.UTF8.GetString(AESEncrypt(Encoding.UTF8.GetBytes(EncryptString)));
}
/// <summary>
/// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)
/// </summary>
/// <param name="EncryptString">待加密密文</param>
public static byte[] AESEncrypt(byte[] contentBytes)
{
if (contentBytes.Length == 0) { return contentBytes; }
byte[] resultBytes;
try
{
byte[] keyBytes = Encoding.UTF8.GetBytes(AES_KEY);
byte[] iv = Encoding.UTF8.GetBytes(AES_IV);
RijndaelManaged rm = new RijndaelManaged();
rm.Key = keyBytes;
rm.IV = iv;
rm.Mode = CipherMode.CBC;
rm.Padding = PaddingMode.PKCS7;
ICryptoTransform ict = rm.CreateEncryptor();
resultBytes = ict.TransformFinalBlock(contentBytes, 0, contentBytes.Length);
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
return resultBytes;
}
/// <summary>
/// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)
/// </summary>
/// <param name="DecryptString">待解密密文</param>
public static string AESDecrypt(string DecryptString)
{
return Encoding.UTF8.GetString(AESDecrypt(Convert.FromBase64String(DecryptString)));
}
/// <summary>
/// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法)
/// </summary>
/// <param name="contentBytes">待解密密文</param>
public static byte[] AESDecrypt(byte[] contentBytes)
{
if (contentBytes.Length == 0) { return contentBytes; }
byte[] resultBytes;
try
{
byte[] keyBytes = Encoding.UTF8.GetBytes(AES_KEY);
byte[] iv = Encoding.UTF8.GetBytes(AES_IV);
RijndaelManaged rm = new RijndaelManaged();
rm.Key = keyBytes;
rm.IV = iv;
rm.Mode = CipherMode.CBC;
rm.Padding = PaddingMode.PKCS7;
ICryptoTransform ict = rm.CreateDecryptor();
resultBytes = ict.TransformFinalBlock(contentBytes, 0, contentBytes.Length);
}
catch (IOException ex) { throw ex; }
catch (CryptographicException ex) { throw ex; }
catch (ArgumentException ex) { throw ex; }
catch (Exception ex) { throw ex; }
return resultBytes;
}
}