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 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 }
时间: 2024-10-13 11:52:22

Core DES加、解密的相关文章

DES加解密算法的简单实现

前几天刚写完一个简单的DES算法的实验,拿来作为第一次发到博客的随笔,填充一下空空如也的博客,献丑了 因为主要目的是Easy-To-Understand,再现一个直观的DES加解密的过程,所以很浪费地每一个数据位都用一个short整型存储,用来理ying解fu过zuo程ye就好(虽说DES这种对称加密算法十多年前就已经被淘汰了,现在一般建议用AES或者DES3 “1973 年,美国国家标准局(NBS)开始征集一种标准的数据加密标准算法(DES),以用于非机密性政府机构.商业部门和民间的对非机密的

使用DES加解密

这里使用框架提供的des加解密库: 首先引入头文件 #import <CommonCrypto/CommonCryptor.h> 主要的加解密函数如下: /*字符串加密 *参数 *plainText : 加密明文 *key        : 密钥 64位 */ + (NSString *) encryptUseDES:(NSString *)plainText key:(NSString *)key { NSString *ciphertext = nil; const char *textB

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

原文:一个java的DES加解密类转换成C# 一个java的des加密解密代码如下: //package com.visionsky.util; import java.security.*; //import java.util.regex.Pattern; //import java.util.Hashtable; import javax.crypto.*; import javax.crypto.spec.*; import sun.misc.*; /** * des加密解密 */ pu

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

最基本的就是经常用的md5加密算法 代码如下 var  MD5=function (data) {       var _encrymd5 = require('crypto').createHash('md5');      var Buffer = require("buffer").Buffer;  //解决中文不一致的BUG    var buf = new Buffer(data);    var str = buf.toString("binary");

DES加解密算法Qt实现

算法解密qt加密table64bit [声明] (1) 本文源码 大部分源码来自:DES算法代码.在此基础上,利用Qt编程进行了改写,实现了DES加解密算法,并添加了文件加解密功能.在此对署名为bengold1979的网友表示感谢!本文是对DES算法代码一文代码的具体描述.该源码仅供学习交流,请勿用于商业目的. (2) 图片及描述 图片及部分解析来自 http://zh.wikipedia.org/wiki/%E8%B3%87%E6%96%99%E5%8A%A0%E5%AF%86%E6%A8%9

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

原文地址:传送门 本文提供了一个能使JavaScript与C#互通的DES加解密算法的实现,在前台页面中用JavaScript版本的DES算法将数据加密之后,传到服务器端,在服务器端可用C#版本的DES解密算法将其解密,得到原始数据,以起到一定的保密作用.但基于算法本身和密钥保密程度方面的考虑,使用本算法加密后的数据,其保密程度不是很高,故请酌情使用. 声明:本文中的JavaScript版的DES加解密算法来自于互联网,但为了方便于转化成C#版本的代码,本人对其进行了细微调整. JavaScri

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

一.简介 DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法.密钥长度是64位(bit),超过位数密钥被忽略.所谓对称性加密即加密和解密密钥相同,对称性加密一般会按照固定长度,把待加密字符串分成块,不足一整块或者刚好最后有特殊填充字符. 跨语言做 DES 加密解密经常会出现问题,往往是填充方式不对.编码不一致或者加密解密模式没有对应上造成.常见的填充模式有: pkcs5.pkcs7.iso10126.ansix9

LKT系列加密芯片DES加解密以及OpenSSL DES接口实现加解密

1.测试目标使用已经预置DES密钥的LKT4201N系列加密芯片完成运算2.测试环境本示例运行环境为windows系统.测试软件LCS KIT.LKT-K100开发板.3.测试步骤注意:"->"表示使用LCS KIT软件操作LKT-K100向加密芯片发送数据:"<-"表示使用LCS KIT软件操作LKT-K100读回加密芯片输出的数据.4.测试指令使用LKT4201N内部已存放的01号30密钥和01号31密钥进行加密操作测试( 注: 如何创建KEY文件和

实现与JS相同的Des加解密算法【转】

Java代码 import java.util.ArrayList; import java.util.List; /** * DES加密/解密 * * @Copyright Copyright (c) 2015 * @author liuyazhuang * @see DESCore */ public class Des { public Des() { } public static void main(String[] args) { Des desObj = new Des(); St

java des加解密

package com.des.test; import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.cr