首页 > 代码库 > Core DES加、解密

Core DES加、解密

安装 Portable.BouncyCastle Nuget包
地址:https://www.nuget.org/packages/Portable.BouncyCastle/
Install-Package Portable.BouncyCastle
 
技术分享

 

 1 using Org.BouncyCastle.Crypto; 2 using Org.BouncyCastle.Crypto.Engines; 3 using Org.BouncyCastle.Crypto.Modes; 4 using Org.BouncyCastle.Crypto.Paddings; 5 using Org.BouncyCastle.Crypto.Parameters; 6 using System; 7 using System.Collections.Generic; 8 using System.IO; 9 using System.Security.Cryptography;10 using System.Text;11 12 namespace ConsoleAppDES13 {14     class Program15     {16         public static string desData = http://www.mamicode.com/"fu kai hang";17         public static string desKey = "12345678";18         public static string desIV = "12345678";19         static void Main(string[] args)20         {21             var encrypt = DESHelper.EncryptDES(desData, desKey, desIV);22             Console.WriteLine(encrypt);23             var decrypt = DESHelper.DecryptDES(encrypt, desKey, desIV);24             Console.WriteLine(decrypt);25             Console.ReadKey();26         }27     }28     public class DESHelper29     {30         static IBlockCipher engine = new DesEngine();31         /// <summary>32         /// 使用DES加密33         /// </summary>34         /// <param name="data">待加密的字符串</param>35         /// <param name="key">加密密钥,要求8位</param>36         /// <param name="iv">偏移向量</param>37         /// <returns></returns>38         public static string EncryptDES(string data, string key, string iv)39         {40             byte[] byKey = Encoding.UTF8.GetBytes(key);41             byte[] byIV = Encoding.UTF8.GetBytes(iv);42             byte[] byData =http://www.mamicode.com/ Encoding.UTF8.GetBytes(data);43 44             BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(engine), new Pkcs7Padding());45             cipher.Init(true, new ParametersWithIV(new DesParameters(byKey), byIV));46             byte[] rv = new byte[cipher.GetOutputSize(byData.Length)];47             int tam = cipher.ProcessBytes(byData, 0, byData.Length, rv, 0);48             cipher.DoFinal(rv, tam);49             return Convert.ToBase64String(rv);50         }51         /// <summary>52         /// 使用DES解密53         /// </summary>54         /// <param name="data">待解密的字符串</param>55         /// <param name="key">解密密钥,要求8位</param>56         /// <param name="vi">偏移向量</param>57         /// <returns></returns>58         public static string DecryptDES(string data, string key, string vi)59         {60             StringBuilder ret = new StringBuilder();61             foreach (byte b in Convert.FromBase64String(data))62             {63                 ret.AppendFormat("{0:X2}", b);64             }65             byte[] byData = http://www.mamicode.com/new byte[ret.ToString().Length / 2];66             for (int x = 0; x < ret.ToString().Length / 2; x++)67             {68                 int i = (Convert.ToInt32(ret.ToString().Substring(x * 2, 2), 16));69                 byData[x] = (byte)i;70             }71             byte[] byKey = Encoding.UTF8.GetBytes(key);72             byte[] byVI = Encoding.UTF8.GetBytes(vi);73             BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(engine));74             cipher.Init(false, new ParametersWithIV(new DesParameters(byKey), byVI));75             byte[] rv = new byte[cipher.GetOutputSize(byData.Length)];76             int tam = cipher.ProcessBytes(byData, 0, byData.Length, rv, 0);77             cipher.DoFinal(rv, tam);78             var rvl = new List<byte>();79             rvl.AddRange(rv);80             rvl.RemoveAll(b => b == 0);81             rv = rvl.ToArray();82             return Encoding.UTF8.GetString(rv);83         }84     }85 }

 

Core DES加、解密