AES加解密
Posted loushengjie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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);//解密
//解密之后就是一个字符串(你传入的参数是什么就是什么)
如有疑问请咨询
以上是关于AES加解密的主要内容,如果未能解决你的问题,请参考以下文章