• AES加密解密 助手类 CBC加密模式


    string str = "2018";
    string result1 = AESHelper.AesEncrypt(str);
    string result2 = AESHelper.AesDecrypt(result1);
    namespace Demo
    {
        /// <summary>
        /// AES加密解密 助手类
        /// CBC加密模式
        /// </summary>
        public class AESHelper
        {
            /// <summary>
            /// 默认密钥-长度32位
            /// </summary>
            private const string Key = "32位";
    
            /// <summary>
            /// 默认向量-长度16位
            /// </summary>
            private const string Iv = "16位";
    
    
            /// <summary>  
            /// AES加密  
            /// </summary>  
            /// <param name="str">需要加密字符串</param>  
            /// <returns>加密后字符串</returns> 
            public static string AesEncrypt(string str)
            {
                return Encrypt(str, Key);
            }
    
            /// <summary>  
            /// AES解密  
            /// </summary>  
            /// <param name="str">需要解密字符串</param>  
            /// <returns>解密后字符串</returns>  
            public static string AesDecrypt(string str)
            {
                return Decrypt(str, Key);
            }
    
    
            /// <summary>
            ///  AES 加密
            /// </summary>
            /// <param name="str">明文(待加密)</param>
            /// <param name="key">密文</param>
            /// <returns></returns>
            private static string Encrypt(string str, string key)
            {
                if (string.IsNullOrEmpty(str)) return null;
                Byte[] toEncryptArray = Encoding.UTF8.GetBytes(str);
    
                RijndaelManaged rm = new RijndaelManaged
                {
                    Key = Encoding.UTF8.GetBytes(key),
                    Mode = CipherMode.ECB,
                    Padding = PaddingMode.PKCS7,
                    IV = Encoding.UTF8.GetBytes(Iv)
                };
    
                ICryptoTransform cTransform = rm.CreateEncryptor();
                Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
                return Convert.ToBase64String(resultArray, 0, resultArray.Length);
            }
            /// <summary>
            ///  AES 解密
            /// </summary>
            /// <param name="str">明文(待解密)</param>
            /// <param name="key">密文</param>
            /// <returns></returns>
            private static string Decrypt(string str, string key)
            {
                if (string.IsNullOrEmpty(str)) return null;
                Byte[] toEncryptArray = Convert.FromBase64String(str);
    
                RijndaelManaged rm = new RijndaelManaged
                {
                    Key = Encoding.UTF8.GetBytes(key),
                    Mode = CipherMode.ECB,
                    Padding = PaddingMode.PKCS7,
                    IV = Encoding.UTF8.GetBytes(Iv)
                };
    
                ICryptoTransform cTransform = rm.CreateDecryptor();
                Byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
    
                return Encoding.UTF8.GetString(resultArray);
            }
        }
    }

    文章内容参考于(原出处):

    C#几种常用的加密方式

    C#加密解密(AES)-AESHelper

  • 相关阅读:
    AT24C0X I2C通信原理
    Windows文件夹、文件源代码对比工具--WinMerge
    SignalTap导致PCIe Read/Write卡死
    Windows CMD 支持ls命令
    何为内存模型(JMM)?
    何为内存重排序?
    何为安全发布,又何为安全初始化?
    Hibernate入门之many to many关系映射详解
    Hibernate入门之one to many关系映射详解
    Hibernate入门之one to one关系映射详解
  • 原文地址:https://www.cnblogs.com/gilbert/p/9982210.html
Copyright © 2020-2023  润新知