zoukankan      html  css  js  c++  java
  • AES加解密

    一个程序最忌讳的就是把自己的数据暴露给其他人,一个加解密可以让你感觉安全性好一些

    直接上代码

    一个加密类

    using System;
    using System.IO;
    using System.Security.Cryptography;
    using System.Text;
    namespace Common
    {
        public class AECHelper
        {
            const string AES_IV = "";//16位    
    
            static string key = "";
            /// <summary>        
            /// AES加密算法  
            /// </summary>  
            /// <param name="input">明文字符串</param>  
            /// <param name="key">密钥(32位)</param>  
            /// <returns>字符串</returns>  
            public static string EncryptByAES(string input)
            {
                byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32));
                using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
                {
                    aesAlg.Key = keyBytes;
                    aesAlg.IV = Encoding.UTF8.GetBytes(AES_IV.Substring(0, 16));
    
                    ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
                    using (MemoryStream msEncrypt = new MemoryStream())
                    {
                        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
                        {
                            using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
                            {
                                swEncrypt.Write(input);
                            }
                            byte[] bytes = msEncrypt.ToArray();
                            return ByteArrayToHexString(bytes);
                        }
                    }
                }
            }
    
            /// <summary>  
            /// AES解密  
            /// </summary>  
            /// <param name="input">密文字节数组</param>  
            /// <param name="key">密钥(32位)</param>  
            /// <returns>返回解密后的字符串</returns>  
            public static string DecryptByAES(string input)
            {
                byte[] inputBytes = HexStringToByteArray(input);
                byte[] keyBytes = Encoding.UTF8.GetBytes(key.Substring(0, 32));
                using (AesCryptoServiceProvider aesAlg = new AesCryptoServiceProvider())
                {
                    aesAlg.Key = keyBytes;
                    aesAlg.IV = Encoding.UTF8.GetBytes(AES_IV.Substring(0, 16));
    
                    ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
                    using (MemoryStream msEncrypt = new MemoryStream(inputBytes))
                    {
                        using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, decryptor, CryptoStreamMode.Read))
                        {
                            using (StreamReader srEncrypt = new StreamReader(csEncrypt))
                            {
                                return srEncrypt.ReadToEnd();
                            }
                        }
                    }
                }
            }
    
            /// <summary>
            /// 将指定的16进制字符串转换为byte数组
            /// </summary>
            /// <param name="s">16进制字符串(如:“7F 2C 4A”或“7F2C4A”都可以)</param>
            /// <returns>16进制字符串对应的byte数组</returns>
            public static byte[] HexStringToByteArray(string s)
            {
                s = s.Replace(" ", "");
                byte[] buffer = new byte[s.Length / 2];
                for (int i = 0; i < s.Length; i += 2)
                    buffer[i / 2] = (byte)Convert.ToByte(s.Substring(i, 2), 16);
                return buffer;
            }
    
            /// <summary>
            /// 将一个byte数组转换成一个格式化的16进制字符串
            /// </summary>
            /// <param name="data">byte数组</param>
            /// <returns>格式化的16进制字符串</returns>
            public static string ByteArrayToHexString(byte[] data)
            {
                StringBuilder sb = new StringBuilder(data.Length * 3);
                foreach (byte b in data)
                {
                    //16进制数字
                    sb.Append(Convert.ToString(b, 16).PadLeft(2, '0'));
                    //16进制数字之间以空格隔开
                    //sb.Append(Convert.ToString(b, 16).PadLeft(2, '0').PadRight(3, ' '));
                }
                return sb.ToString().ToUpper();
            }
        }
    }

    加密

      Endresult = CryptoJS.EncryptByAES(Endresult);//加密
      string callback = HttpContext.Current.Request["jsoncallback"];
       if (!string.IsNullOrEmpty(callback))
       {
           context.Response.Write(callback + "({result:'" + Endresult + "'})");
       }
       else
       {
          context.Response.Write(Endresult);
       }

    解密

    string strHead = "";string ReqMessageBody = "";if (strHead != "")
    {
       if (ReqMessageBody != "")
       {
            ReqMessageBody = ReqMessageBody.Replace(" ", "+");
            ReqMessageBody = CryptoJS.DecryptByAES(ReqMessageBody);//解密
       }
       strHead = strHead.Replace(" ", "+");
       strHead = CryptoJS.DecryptByAES(strHead);//解密
      //解密之后就是一个字符串(你传入的参数是什么就是什么)
    }

    如有疑问请咨询

  • 相关阅读:
    一步一步学EF系列二【Fluent API的方式来处理实体与数据表之间的映射关系】
    EntityFramework 6 开篇
    DOS For循环
    mysql中查看所有表、表字段、表注释、字段注释
    灾备还原之gitlab
    JavaScript 实现继承的5种方式
    HBuilder完成webApp入门(5) 实例
    HBuilder完成webApp入门(4) 实例
    HBuilder完成webApp入门(3) 关于webview (转)
    HBuilder完成webApp入门(2)
  • 原文地址:https://www.cnblogs.com/loushengjie/p/11102396.html
Copyright © 2011-2022 走看看