
本文共 2589 字,大约阅读时间需要 8 分钟。
.NET Core上面的DES等加密算法要等到1.2 才支持,我们可是急需这个算法的支持,文章《》需要用Nodejs,很多人觉得这个有点不好,今天就给大家介绍下BouncyCastle (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); }转载地址:https://www.cnblogs.com/shanyou/p/6135340.html 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关于作者
