3des演算法源碼

  • 2020 年 1 月 10 日
  • 筆記

using System; using System.Text; using System.IO; using System.Security.Cryptography; class Class1 { static void Main() {   Console.WriteLine("Encrypt String…");   txtKey = "tkGGRmBErvc=";   btnKeyGen();   Console.WriteLine("Encrypt Key :{0}",txtKey);   txtIV = "Kl7ZgtM1dvQ=";   btnIVGen();   Console.WriteLine("Encrypt IV :{0}",txtIV);   Console.WriteLine();   string txtEncrypted = EncryptString("1111");   Console.WriteLine("Encrypt String : {0}",txtEncrypted);   string txtOriginal = DecryptString(txtEncrypted);   Console.WriteLine("Decrypt String : {0}",txtOriginal); } private static SymmetricAlgorithm mCSP; private static string txtKey; private static string txtIV; private static void btnKeyGen() {   mCSP = SetEnc();   byte[] byt2 = Convert.FromBase64String(txtKey);   mCSP.Key = byt2; } private static void btnIVGen() {   byte[] byt2 = Convert.FromBase64String(txtIV);   mCSP.IV = byt2; } private static string EncryptString(string Value) {   ICryptoTransform ct;   MemoryStream ms;   CryptoStream cs;   byte[] byt;   ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);   byt = Encoding.UTF8.GetBytes(Value);   ms = new MemoryStream();   cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);   cs.Write(byt, 0, byt.Length);   cs.FlushFinalBlock();   cs.Close();   return Convert.ToBase64String(ms.ToArray()); } private static string DecryptString(string Value) {   ICryptoTransform ct;   MemoryStream ms;   CryptoStream cs;   byte[] byt;   ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);   byt = Convert.FromBase64String(Value);   ms = new MemoryStream();   cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);   cs.Write(byt, 0, byt.Length);   cs.FlushFinalBlock();   cs.Close();   return Encoding.UTF8.GetString(ms.ToArray()); } private static SymmetricAlgorithm SetEnc() {   return new DESCryptoServiceProvider(); } } 3DES(即Triple DES)是DES向AES過渡的加密演算法(1999年,NIST將3-DES指定為過渡的加密標準),是DES的一個更安全的變形。它以DES為基本模組,通過組合分組方法設計出分組加密演算法,其具體實現如下:設Ek()和Dk()代表DES演算法的加密和解密過程,K代表DES演算法使用的密鑰,P代表明文,C代表密表,這樣, 3DES加密過程為:C=Ek3(Dk2(Ek1(P))) 3DES解密過程為:P=Dk1((EK2(Dk3(C))) 具體的加/解密過程如圖2所示。K1、K2、K3決定了演算法的安全性,若三個密鑰互不相同,本質上就相當於用一個長為168位的密鑰進行加密。多年來,它在對付強力***時是比較安全的。若數據對安全性要求不那麼高,K1可以等於K3。在這種情況下,密鑰的有效長度為112位。