zoukankan      html  css  js  c++  java
  • C# AES 128加密,解密示例

            /// <summary>
            /// AES加密
            /// </summary>
            /// <param name="clearTxt"></param>
            /// <returns></returns>
            public static string AesEncrypt(string clearTxt)
            {
                string secretKey = "I15TMSLO0KXUWTHO";
    
                byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);
    
                using (RijndaelManaged cipher = new RijndaelManaged())
                {
                    cipher.Mode = CipherMode.CBC;
                    cipher.Padding = PaddingMode.PKCS7;
                    cipher.KeySize = 128;
                    cipher.BlockSize = 128;
                    cipher.Key = keyBytes;
                    cipher.IV = keyBytes;
    
                    byte[] valueBytes = Encoding.UTF8.GetBytes(clearTxt);
    
                    byte[] encrypted;
                    using (ICryptoTransform encryptor = cipher.CreateEncryptor())
                    {
                        using (MemoryStream ms = new MemoryStream())
                        {
                            using (CryptoStream writer = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
                            {
                                writer.Write(valueBytes, 0, valueBytes.Length);
                                writer.FlushFinalBlock();
                                encrypted = ms.ToArray();
    
                                StringBuilder sb = new StringBuilder();
                                for (int i = 0; i < encrypted.Length; i++)
                                    sb.Append(Convert.ToString(encrypted[i], 16).PadLeft(2, '0'));
                                return sb.ToString().ToUpperInvariant();
                            }
                        }
                    }
                }
            }
    
            /// <summary>
            /// AES解密
            /// </summary>
            /// <param name="encrypted"></param>
            /// <returns></returns>
            public static string AesDecypt(string encrypted)
            {
                string secretKey = "I15TMSLO0KXUWTHO";
    
                byte[] keyBytes = Encoding.UTF8.GetBytes(secretKey);
    
                using (RijndaelManaged cipher = new RijndaelManaged())
                {
                    cipher.Mode = CipherMode.CBC;
                    cipher.Padding = PaddingMode.PKCS7;
                    cipher.KeySize = 128;
                    cipher.BlockSize = 128;
                    cipher.Key = keyBytes;
                    cipher.IV = keyBytes;
    
                    List<byte> lstBytes = new List<byte>();
                    for (int i = 0; i < encrypted.Length; i += 2)
                        lstBytes.Add(Convert.ToByte(encrypted.Substring(i, 2), 16));
    
                    using (ICryptoTransform decryptor = cipher.CreateDecryptor())
                    {
                        using (MemoryStream msDecrypt = new MemoryStream(lstBytes.ToArray()))
                        {
                            using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
                            {
                                using (StreamReader srDecrypt = new StreamReader(csDecrypt))
                                {
                                    return srDecrypt.ReadToEnd();
                                }
                            }
                        }
                    }
                }
            }
  • 相关阅读:
    web服务器有哪些_nodejs的工作原理是什么
    WebRTC的运行流程和运行机制到底是怎么进行的
    认识WebRTC的整体架构以及它重要的目录结构是什么
    api接口风格restful风格的十大规范
    Mysql中高级操作中的视图_事务_索引_账户权限管理
    C#常见几种集合比较
    堆(Heap)和栈(Stack)
    线程同步的几种方式
    使用临时表大批量插入数据
    select出来的表增加递增列
  • 原文地址:https://www.cnblogs.com/xyz0835/p/5775850.html
Copyright © 2011-2022 走看看