加密主要使用 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"; ////// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// /// 待加密密文 public static string AESEncrypt(string EncryptString) { return Encoding.UTF8.GetString(AESEncrypt(Encoding.UTF8.GetBytes(EncryptString))); } ////// AES 加密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// /// 待加密密文 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; } ////// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// /// 待解密密文 public static string AESDecrypt(string DecryptString) { return Encoding.UTF8.GetString(AESDecrypt(Convert.FromBase64String(DecryptString))); } ////// AES 解密(高级加密标准,是下一代的加密算法标准,速度快,安全级别高,目前 AES 标准的一个实现是 Rijndael 算法) /// /// 待解密密文 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; } }