1、KEY和IV分別賦值
//默認密鑰向量 private static byte[] Iv= { 0x12, 0x34, 0x56, 0x78, 0x90, 0xAB, 0xCD, 0xEF }; /// <summary> /// DES加密字符串 /// </summary> /// <param name="encryptString">待加密的字符串</param> /// <param name="encryptKey">加密密鑰,要求為8位</param> /// <returns>加密成功返回加密后的字符串,失敗返回源串</returns> public static string EncryptDES(string encryptString, string encryptKey) { try { byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8)); byte[] rgbIV = Iv; byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString); DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider(); var mStream = new MemoryStream(); var cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey,rgbIV), CryptoStreamMode.Write); cStream.Write(inputByteArray, 0, inputByteArray.Length); cStream.FlushFinalBlock(); return Convert.ToBase64String(mStream.ToArray()); } catch { return encryptString; } }
2、根據8位密鑰,建立KEY和IV
public static string Encrypt(string pToEncrypt, string sKey) { var des = new DESCryptoServiceProvider(); //把字符串放到byte數組中 byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt); //建立加密對象的密鑰和偏移量 des.Key = Encoding.ASCII.GetBytes(sKey); des.IV = Encoding.ASCII.GetBytes(sKey); var ms = new MemoryStream(); var cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write); cs.Write(inputByteArray, 0, inputByteArray.Length); cs.FlushFinalBlock(); return Encoding.UTF8.GetString(ms.ToArray()); }
3、KEY和IV為空,調用 GenerateKey 方法以創建新的隨機key ,調用 GenerateIV 方法以創建新的隨機 IV
using System; using System.Security.Cryptography; using System.Text; class EncryptorExample { private static string quote = "Things may come to those who wait, but only the " + "things left by those who hustle. -- Abraham Lincoln"; public static void Main() { AesCryptoServiceProvider aesCSP = new AesCryptoServiceProvider(); aesCSP.GenerateKey(); aesCSP.GenerateIV(); byte[] encQuote = EncryptString(aesCSP, quote); Console.WriteLine("Encrypted Quote:\n"); Console.WriteLine(Convert.ToBase64String(encQuote)); Console.WriteLine("\nDecrypted Quote:\n"); Console.WriteLine(DecryptBytes(aesCSP, encQuote)); } public static byte[] EncryptString(SymmetricAlgorithm symAlg, string inString) { byte[] inBlock = UnicodeEncoding.Unicode.GetBytes(inString); ICryptoTransform xfrm = symAlg.CreateEncryptor(); byte[] outBlock = xfrm.TransformFinalBlock(inBlock, 0, inBlock.Length); return outBlock; } public static string DecryptBytes(SymmetricAlgorithm symAlg, byte[] inBytes) { ICryptoTransform xfrm = symAlg.CreateDecryptor(); byte[] outBlock = xfrm.TransformFinalBlock(inBytes, 0, inBytes.Length); return UnicodeEncoding.Unicode.GetString(outBlock); } }
另外:一般DES加密完的字符串大概長這樣:U2FsdGVkX1+PX0/VZiqtq/fOMdgdX7mTQh3RNACgods=
因為有一些特殊符號,如果拼在querystring中不便於傳輸,可以考慮這樣寫:
var str= new StringBuilder(); foreach (byte b in ms.ToArray()) { str.AppendFormat("{0:X2}", b); } return str.ToString();
來代替直接返回 return Encoding.UTF8.GetString(ms.ToArray());
這樣加密后的字符串長這樣:4BD2B330AA45FFAD57109EE56D34E21B7E3858BA45A096220EB6634A5B779E80