在.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图形功能的若干问题> ...
随机推荐
- Database Replay和Consolidated Database replay
简介 在数据库的迁移和升级场景中,我们经常会遇到一个问题:在做压力测试时,如何模拟真实的业务压力,解决这个问题的方法有很多,比如:应用方开发模拟程序或者使用压力测试工具模拟,如load runner, ...
- 【原】FMDB源码阅读(一)
[原]FMDB源码阅读(一) 本文转载请注明出处 —— polobymulberry-博客园 1. 前言 说实话,之前的SDWebImage和AFNetworking这两个组件我还是使用过的,但是对于 ...
- OpenCASCADE Expression Interpreter by Flex & Bison
OpenCASCADE Expression Interpreter by Flex & Bison eryar@163.com Abstract. OpenCASCADE provide d ...
- EntityFramework之DetectChanges's Secrets(三)(我为EF正名)
前言 对于应用程序开发者来说,通常不需要考虑太多对于Entity Framework中的变更追踪(change tracking),但是变更追踪和DetectChanges方法是栈的一部分,在这其中, ...
- Linux常用命令操作
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- iOS UITableView 与 UITableViewController
很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名.项目地址. UITab ...
- STM32F429 LCD程序移植
STM32F429自带LCD驱动器,这一具有功能给我等纠结于屏幕驱动的程序员带来了很大的福音.有经验的读者一定有过这样的经历,用FSMC驱动带由控制器的屏幕时候,一旦驱动芯片更换,则需要重新针对此驱动 ...
- css知多少之绝对定位小记
一.position定位常见属性 对于属性position来说,属性值有static/relative/absolute/fixed/inherit以下只对绝对定位position:absolute详 ...
- JavaScript基础学习-函数及作用域
函数和作用域是JavaScript的重要组成部分,我们在使用JavaScript编写程序的过程中经常要用到这两部分内容,作为初学者,我经常有困惑,借助写此博文来巩固下之前学习的内容. (一)JavaS ...
- ramdisk plus v11.5安装内存虚拟硬盘
ramdisk plus v11.5.桌面版操作及应用图解说明 一.ramdisk plus程序安装方法: 1.先安装英文原版软件(RamDisk-desktop.exe桌面版),安装路径不要更改,安 ...