在.NET Core 里使用 BouncyCastle 的DES加密算法
.NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章《使用 JavaScriptService 在.NET Core 里实现DES加密算法》需要用Nodejs,很多人觉得这个有点不好,今天就给大家介绍下BouncyCastle (Portable.BouncyCastle)https://www.nuget.org/packages/Portable.BouncyCastle/库为我们提供的原生的.NET Core的支持库的Des算法。BouncyCastle的文档比较少,折腾了好久才写出了.NET 代码等价的一个封装。
public class TDesbouncy
{
IBlockCipher engine = new DesEngine();
/// <summary>
/// 使用DES加密,key输入密码的时候,必须使用英文字符,区分大小写,且字符数量是8个,不能多也不能少
/// </summary>
/// <param name="plainText">需要加密的字符串</param>
/// <param name="keys">加密字符串的密钥</param>
/// <returns>加密后的字符串</returns>
public string Encrypt(string keys, string plainText)
{
byte[] ptBytes = Encoding.UTF8.GetBytes(plainText);
byte[] rv = Encrypt(keys, ptBytes);
StringBuilder ret = new StringBuilder();
foreach (byte b in rv)
{
ret.AppendFormat("{0:X2}", b);
}
return ret.ToString();
}
private byte[] Encrypt(string keys, byte[] ptBytes)
{
byte[] key = Encoding.UTF8.GetBytes(keys);
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(engine),new Pkcs7Padding());
cipher.Init(true, new ParametersWithIV(new DesParameters(key),key));
byte[] rv = new byte[cipher.GetOutputSize(ptBytes.Length)];
int tam = cipher.ProcessBytes(ptBytes, 0, ptBytes.Length, rv, 0);
cipher.DoFinal(rv, tam);
return rv;
}
/// <summary>
/// 使用DES解密,key输入密码的时候,必须使用英文字符,区分大小写,且字符数量是8个,不能多也不能少
/// </summary>
/// <param name="cipherText">需要加密的字符串</param>
/// <param name="keys">加密字符串的密钥</param>
/// <returns>解密后的字符串</returns>
public string Decrypt(string keys, string cipherText)
{
byte[] inputByteArray = new byte[cipherText.Length / 2];
for (int x = 0; x < cipherText.Length / 2; x++)
{
int i = (Convert.ToInt32(cipherText.Substring(x * 2, 2), 16));
inputByteArray[x] = (byte)i;
}
var rv = Decrypt(keys, inputByteArray);
return Encoding.UTF8.GetString(rv);
}
private byte[] Decrypt(string keys, byte[] cipherText)
{
byte[] key = Encoding.UTF8.GetBytes(keys);
BufferedBlockCipher cipher = new PaddedBufferedBlockCipher(new CbcBlockCipher(engine));
cipher.Init(false, new ParametersWithIV(new DesParameters(key), key));
byte[] rv = new byte[cipher.GetOutputSize(cipherText.Length)];
int tam = cipher.ProcessBytes(cipherText, 0, cipherText.Length, rv, 0);
cipher.DoFinal(rv, tam);
return rv;
}
}
public static void Main(string[] args)
{
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
string key = "geffzhan";
string content = "This project.config whoopla is a mess. So what they mean by .NetCore, you still have to reference everything correctly";
TDesbouncy bouncy = new TDesbouncy();
var encrypt = bouncy.Encrypt(key, content);
Console.WriteLine(encrypt);
string descontent = bouncy.Decrypt(key, encrypt);
Console.WriteLine(descontent);
}
在.NET Core 里使用 BouncyCastle 的DES加密算法的更多相关文章
- BDD实战篇 - .NET Core里跑Specflow - 可以跑集成测试和单元测试
这是<如何用ABP框架快速完成项目 >系列中和DevOps系列文章其中一篇文章. BDD很赞!比TDD先进很多,能够大大提高编码效率. 上一篇文章说了如何在.NET Core里安装 ...
- des加密算法java&c#
项目中用到的数据加密方式是ECB模式的DES加密得到的十六进制字符串.技术支持让写一个.net版的加密算法.这里做一下记录. java版: 16进制使用的是bouncycastle. import c ...
- 浅谈DES加密算法
一.DES加密算法介绍 1.要求密钥必须是8个字节,即64bit长度 2.因为密钥是byte[8] , 代表字符串也可以是非可见的字节,可以与Base64编码算法一起使用 3.加密.解密都需要通过字节 ...
- JAVA使用DES加密算法加密解密
程序中使用了.properties文件作为参数配置文档,好处是灵活配置各项参数 一旦对数据库的一些参数进行了配置,势必涉及数据库的IP,端口,用户名和密码 properties文件全是unicode编 ...
- 对称密码——DES加密算法
前言 本篇博文将介绍对称密码算法中的DES密码的算法原理与代码实现(Java) DES算法原理 DES加密算法是对称加密算法(加密和解密使用同一个密钥)中的一种,DES也是分组密码,以64位为分组对明 ...
- android和.net webservice中的DES加密算法
也是看了一堆的例子,本身并不会写加密算法,好在只要会用就行了,我们把在app中使用的参数加密,然后在.net端的webservice中进行解密,本身并没有什么问题,但是android下和.net下的d ...
- DES加密算法的C++实现
<信息安全技术>这门课又在讲 DES 加密算法了,以前用纯C写过一次,这次我用 C++ 重新写了一个,写篇文章以备后用.本文介绍了 DES 算法加密的大致步骤和整体流程. 一.DES算法原 ...
- .net中DES加密算法研究
/// <summary> /// DES加密算法 /// </summary> /// <param name="toEncrypt">要加密 ...
- 使用 JavaScriptService 在.NET Core 里实现DES加密算法
文章<ASP.NET Core love JavaScript>和<跨平台的 NodeJS 组件解决 .NetCore 不支持 System.Drawing图形功能的若干问题> ...
随机推荐
- 动画requestAnimationFrame
前言 在研究canvas的2D pixi.js库的时候,其动画的刷新都用requestAnimationFrame替代了setTimeout 或 setInterval 但是jQuery中还是采用了s ...
- 继电器是如何成为CPU的(1)
继电器是如何成为CPU的(1) ——<穿越计算机的迷雾>整理和总结 究竟是如何设计的电路,具有计算和控制的智力? 这一点也不高深.本系列文章从初中学的最简单的电路图说起,看看能不能从最初的 ...
- JAVA for mac 的学习之路
要学习一门新技术,首先得下载相关的工具. 一 . 下载相关工具 1. 下载 jdk formac 下载地址为:http://www.oracle.com/technetwork/java/javase ...
- gulp详细入门教程
本文链接:http://www.ydcss.com/archives/18 gulp详细入门教程 简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优 ...
- EF6 对多个数据库,多个DBContext的情况 进行迁移的方法。
参见: http://stackoverflow.com/questions/21537558/multiple-db-contexts-in-the-same-db-and-application- ...
- JavaScript 常量定义
相信同学们在看见这个标题的时候就一脸懵逼了,什么?JS能常量定义?别逗我好吗?确切的说,JS当中确实没有常量(ES6中好像有了常量定义的关键字),但是深入一下我们可以发现JS很多不为人知的性质,好好利 ...
- Angularjs参考框架地址
1.Table(Grid)参考地址 https://github.com/samu/angular-table https://github.com/daniel-nagy/md-data-table ...
- jQuery幻灯片插件autoPic
原文地址:Jquery自定义幻灯片插件 插件效果图: 演示地址:autoPic项目地址:autoPic 欢迎批评指正!
- C#——传值参数(1)
//我的C#是跟着猛哥(刘铁猛)(算是我的正式老师)<C#语言入门详解>学习的,微信上猛哥也给我讲解了一些不懂得地方,对于我来说简直是一笔巨额财富,难得良师! 这次与大家一起学习C#中的值 ...
- SSH框架和Redis的整合(2)
5. 添加功能的实现 新建一个Action:RClasAction,实现向Redis添加课程数据,并同步到MySQL. package com.school.action; import java.u ...