• AES加密


    using System.Security.Cryptography; 
    

    /// <summary> /// 高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。 /// 这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST) /// 于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。 /// </summary> public class AES { private string _iv = string.Empty; private string _key = string.Empty; #region 属性 /// <summary> /// 获取密钥 /// </summary> private string Key { get { if (string.IsNullOrEmpty(this._key)) { throw new Exception("AES加密未设置密钥key"); } return this._key; } } public AES SetKey(string key) { this._key = key; return this; } /// <summary> /// 获取向量 /// </summary> public string IV { get { if (string.IsNullOrEmpty(_iv)) { throw new Exception("AES加密未设置向量iv的值"); } return this._iv; } } public AES SetIV(string iv) { this._iv = iv; return this; } #endregion #region Encrypt加密 /// <summary> /// AES加密 /// </summary> /// <param name="plainStr">明文字符串</param> /// <returns>密文</returns> public string Encrypt(string plainStr) { byte[] bKey = Encoding.UTF8.GetBytes(this.Key); byte[] bIV = Encoding.UTF8.GetBytes(this.IV); byte[] byteArray = Encoding.UTF8.GetBytes(plainStr); string encrypt = null; Rijndael aes = Rijndael.Create(); using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateEncryptor(bKey, bIV), CryptoStreamMode.Write)) { cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); encrypt = Convert.ToBase64String(mStream.ToArray()); } } aes.Clear(); return encrypt; } /// <summary> /// AES加密 /// </summary> /// <param name="plainStr">明文字符串</param> /// <param name="returnNull">加密失败时是否返回 null,false 返回 String.Empty</param> /// <returns>密文</returns> public string Encrypt(string plainStr, bool returnNull) { string encrypt = this.Encrypt(plainStr); return returnNull ? encrypt : (encrypt ?? String.Empty); } #endregion #region Decrypt解密 /// <summary> /// AES解密 /// </summary> /// <param name="encryptStr">密文字符串</param> /// <returns>明文</returns> public string Decrypt(string encryptStr) { byte[] bKey = Encoding.UTF8.GetBytes(this.Key); byte[] bIV = Encoding.UTF8.GetBytes(this.IV); byte[] byteArray = Convert.FromBase64String(encryptStr); string decrypt = null; Rijndael aes = Rijndael.Create(); using (MemoryStream mStream = new MemoryStream()) { using (CryptoStream cStream = new CryptoStream(mStream, aes.CreateDecryptor(bKey, bIV), CryptoStreamMode.Write)) { cStream.Write(byteArray, 0, byteArray.Length); cStream.FlushFinalBlock(); decrypt = Encoding.UTF8.GetString(mStream.ToArray()); } } aes.Clear(); return decrypt; } /// <summary> /// AES解密 /// </summary> /// <param name="encryptStr">密文字符串</param> /// <param name="returnNull">解密失败时是否返回 null,false 返回 String.Empty</param> /// <returns>明文</returns> public string Decrypt(string encryptStr, bool returnNull) { string decrypt = Decrypt(encryptStr); return returnNull ? decrypt : (decrypt ?? String.Empty); } #endregion }
  • 相关阅读:
    Spring中的Bean的配置形式
    使用外部属性文件配置Bean以及Bean的生命周期方法
    运行时找到main方法所在的类
    获取SpringMVC中所有RequestMapping映射URL信息
    RequestBody只能读取一次的问题
    接口标记为@ResponseBody却不进入ResponseBodyAdvice
    springboot打成jar包后无法解压
    Springboot打包执行源码解析
    关于base64的一个小细节
    Liquibase使用入门
  • 原文地址:https://www.cnblogs.com/songshuai/p/5590890.html
Copyright © 2020-2023  润新知