安装 Portable.BouncyCastle Nuget包
Install-Package Portable.BouncyCastle
 

 using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Engines;
using Org.BouncyCastle.Crypto.Modes;
using Org.BouncyCastle.Crypto.Paddings;
using Org.BouncyCastle.Crypto.Parameters;
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text; namespace ConsoleAppDES
{
class Program
{
public static string desData = "fu kai hang";
public static string desKey = "";
public static string desIV = "";
static void Main(string[] args)
{
var encrypt = DESHelper.EncryptDES(desData, desKey, desIV);
Console.WriteLine(encrypt);
var decrypt = DESHelper.DecryptDES(encrypt, desKey, desIV);
Console.WriteLine(decrypt);
Console.ReadKey();
}
}
public class DESHelper
{
static IBlockCipher engine = new DesEngine();
/// <summary>
/// 使用DES加密
/// </summary>
/// <param name="data">待加密的字符串</param>
/// <param name="key">加密密钥,要求8位</param>
/// <param name="iv">偏移向量</param>
/// <returns></returns>
public static string EncryptDES(string data, string key, string iv)
{
byte[] byKey = Encoding.UTF8.GetBytes(key);
byte[] byIV = Encoding.UTF8.GetBytes(iv);
byte[] byData = Encoding.UTF8.GetBytes(data); BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(engine), new Pkcs7Padding());
cipher.Init(true, new ParametersWithIV(new DesParameters(byKey), byIV));
byte[] rv = new byte[cipher.GetOutputSize(byData.Length)];
int tam = cipher.ProcessBytes(byData, , byData.Length, rv, );
cipher.DoFinal(rv, tam);
return Convert.ToBase64String(rv);
}
/// <summary>
/// 使用DES解密
/// </summary>
/// <param name="data">待解密的字符串</param>
/// <param name="key">解密密钥,要求8位</param>
/// <param name="vi">偏移向量</param>
/// <returns></returns>
public static string DecryptDES(string data, string key, string vi)
{
StringBuilder ret = new StringBuilder();
foreach (byte b in Convert.FromBase64String(data))
{
ret.AppendFormat("{0:X2}", b);
}
byte[] byData = new byte[ret.ToString().Length / ];
for (int x = ; x < ret.ToString().Length / ; x++)
{
int i = (Convert.ToInt32(ret.ToString().Substring(x * , ), ));
byData[x] = (byte)i;
}
byte[] byKey = Encoding.UTF8.GetBytes(key);
byte[] byVI = Encoding.UTF8.GetBytes(vi);
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(engine));
cipher.Init(false, new ParametersWithIV(new DesParameters(byKey), byVI));
byte[] rv = new byte[cipher.GetOutputSize(byData.Length)];
int tam = cipher.ProcessBytes(byData, , byData.Length, rv, );
cipher.DoFinal(rv, tam);
var rvl = new List<byte>();
rvl.AddRange(rv);
rvl.RemoveAll(b => b == );
rv = rvl.ToArray();
return Encoding.UTF8.GetString(rv);
}
}
}

Core DES加、解密的更多相关文章

  1. Node.js的DES加解密和MD5加密

    最基本的就是经常用的md5加密算法 代码如下 var  MD5=function (data) {        var _encrymd5 = require('crypto').createHas ...

  2. 一个java的DES加解密类转换成C#

    原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //i ...

  3. DES加解密算法Qt实现

      算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为b ...

  4. Java Des加解密方法(c#加密Java解密)

    最近我们用Java把一个用.net编写的老系统重新做了翻版,但是登录还是用.net的登录.这样就会遇到一个比较棘手的问题,我们登录用的cookie信息都是.net用des加密的,但我们不得不用Java ...

  5. DES加解密 cbc模式 的简单讲解 && C++用openssl库来实现的注意事项

    DES cbc是基于数据块加密的.数据块的长度为8字节64bit.以数据块为单位循环加密,再拼接.每个数据块加密的秘钥一样,IV向量不同.第一个数据快所需的IV向量,需要我们提供,从第二个数据块开始, ...

  6. JavaScript与C#互通的DES加解密算法

    原文地址:传送门 本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DE ...

  7. PHP 基础篇 - PHP 中 DES 加解密详解

    一.简介 DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥被忽略.所谓对 ...

  8. Java拓展教程:文件DES加解密

    Java拓展教程:文件加解密 Java中的加密解密技术 加密技术根据一般可以分为对称加密技术和非对称加密技术.对称加密技术属于传统的加密技术,它的加密和解密的密钥是相同的,它的优点是:运算速度快,加密 ...

  9. javascript JS CryptoJS DES加解密CBC模式与C#DES加解密相同互通

    我们只知道不同的语言解密要相互通用,就需要遵循相同的加密方式,然而在具体做技术预研的时候,就发现会遇到很多问题,网上找的资料也是比较片面,所以我踩了坑,并且把解决方案和相关资料源码提供出来,给需要的朋 ...

  10. JavaScript与C#互通的DES加解密算法的实现(转)

    本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DES解密算法将其解密 ...

随机推荐

  1. sqlserver2012 数据库差异备份恢复 记录

    sqlserver2012恢复过程: 先恢复全备份,再恢复差异,注意:勾选NoRecovery选项. 恢复完成后,出现: Sqlserver数据库 一直显示“正在还原…” 的状态. 引用:http:/ ...

  2. 性能学习随笔(1)--负载均衡之f5负载均衡

    负载均衡设计涉及软件负载和硬件负载,下文转自CSDN中一篇文章涉及f5硬负载知识 ----转载:https://blog.csdn.net/tvk872/article/details/8063489 ...

  3. Python学习日记 --day3

    1.数据类型整体分析.    int :1,2,3213,用于计算 bool:True False 用于判断 str:‘qweqweqe’ .‘我爱你中国’ .‘1234位朋友’ 储存少量的数据,进行 ...

  4. 把一个syn报文给rst掉

    下面展示一个极其简单的例子,看如何使用netfilter来将一个指定端口的syn报文给rst掉. //************************************************* ...

  5. Habits of Considerate People

    Habits of Considerate People体贴人的八种习惯哲学家亚瑟·叔本华曾经说过:“蜡之可贵,在于燃烧自己温暖他人,人之可贵,在于屈尊敬贤彬彬有礼”,事实的确如此.善意与体贴能够抚慰 ...

  6. js导出excel文件

    <div id="tablesDiv"> <table id="tabDiv1"> <tbody><tr> &l ...

  7. loadrunner飞机订票系统从登陆订票退票登出的脚本实现代码调试通过

    在LR自带的飞机订票系统中,完整模拟一个用户从登陆->订票->退票->登出这样一个业务流程,分解每个事务为一个Action: 进入首页->登陆->进入订票页面->选 ...

  8. Task的在主线程处理异常信息的Helper类

    最近使用task时候需要把异常记录日志,直接注入非单例模式的实例进入异步线程,在高并发情况下会出现一些问题. 所以需要把异常反馈给主线程 ,并且不在主线程里进行等待,研究相关资料后,自己写了一个简单的 ...

  9. hibernate写list到mysql

    用jpa写下面语句执行报错,估计要先手动转成字符串吧,工作忙没继续下去了. public void persist(Goods goods) { Assert.notNull(goods);// go ...

  10. maven的pom.xml文件详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...