zoukankan      html  css  js  c++  java
  • Core DES加、解密

    安装 Portable.BouncyCastle Nuget包
    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 ConsoleAppDES
    13 {
    14     class Program
    15     {
    16         public static string desData = "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 DESHelper
    29     {
    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 = 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 = 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 }
  • 相关阅读:
    ExtJs自学教程(1):从一切API开始
    集成框架 javaweb开发平台ssmy_m(生成代码) java struts2 mybatis spring maven jquery
    hdu2203 KMP水的问题
    Hibernate制图(两)——许多-于─关系映射
    FPGA 异步时钟处理方
    在Magento产品页面的使用jqZoom
    struts2基本介绍
    让你提前知道软件开发(45):第一印象的代码
    struts2 模型分配问题和延迟加载问题
    性能优化(一个)Hibernate 使用缓存(一个、两、查询)提高系统性能
  • 原文地址:https://www.cnblogs.com/a-dou/p/6810675.html
Copyright © 2011-2022 走看看