一個程式最忌諱的就是把自己的數據暴露給其他人,一個加解密可以讓你感覺安全性好一些 直接上代碼 一個加密類 加密 解密 如有疑問請咨詢 ...
一個程式最忌諱的就是把自己的數據暴露給其他人,一個加解密可以讓你感覺安全性好一些
直接上代碼
一個加密類
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);//解密
//解密之後就是一個字元串(你傳入的參數是什麼就是什麼)
}
如有疑問請咨詢