C#版开源免费的Bouncy Castle密码库
前言
今天大姚给大家分享一款C#版开源、免费的Bouncy Castle密码库:BouncyCastle。
项目介绍
BouncyCastle是一款C#版开源、免费的Bouncy Castle密码库,开发人员可以通过该项目在他们的 C# 应用程序中使用 Bouncy Castle 提供的各种密码学功能,从而加强数据的安全性和保护隐私信息。
Bouncy Castle介绍
Bouncy Castle是一个流行的密码学库,提供了广泛的密码算法和协议的实现(包括对称加密、非对称加密、哈希函数、数字签名等)。它由澳大利亚注册的慈善组织“Bouncy Castle军团”开发,旨在提供可靠而安全的加密解决方案。
项目源代码


创建控制台应用
创建一个名为:BouncyCastleExercise的控制台。


安装BouncyCastle包
搜索名为:BouncyCastle.Cryptography包安装:

BouncyCastle使用示例
internal class Program
{
static void Main(string[] args)
{
#region AES加密解密示例
string aesPlaintext = "Hello, 追逐时光者!!!";
byte[] aesKey = new byte[16];
byte[] aesIV = new byte[16];
byte[] aesCiphertext = EncryptAES(aesPlaintext, aesKey, aesIV);
string decryptedAesPlaintext = DecryptAES(aesCiphertext, aesKey, aesIV);
Console.WriteLine("AES plaintext: " + aesPlaintext);
Console.WriteLine("AES ciphertext: " + Convert.ToBase64String(aesCiphertext));
Console.WriteLine("Decrypted AES plaintext: " + decryptedAesPlaintext);
#endregion
#region DES 加密解密示例
string desPlaintext = "Hello, DES!";
byte[] desKey = new byte[8];
byte[] desIV = new byte[8];
byte[] desCiphertext = EncryptDES(desPlaintext, desKey, desIV);
string decryptedDesPlaintext = DecryptDES(desCiphertext, desKey, desIV);
Console.WriteLine("DES plaintext: " + desPlaintext);
Console.WriteLine("DES ciphertext: " + Convert.ToBase64String(desCiphertext));
Console.WriteLine("Decrypted DES plaintext: " + decryptedDesPlaintext);
#endregion
#region RC4 加密解密示例
string rc4Plaintext = "Hello, RC4!";
byte[] rc4Key = new byte[16];
byte[] rc4Ciphertext = EncryptRC4(rc4Plaintext, rc4Key);
string decryptedRc4Plaintext = DecryptRC4(rc4Ciphertext, rc4Key);
Console.WriteLine("RC4 plaintext: " + rc4Plaintext);
Console.WriteLine("RC4 ciphertext: " + Convert.ToBase64String(rc4Ciphertext));
Console.WriteLine("Decrypted RC4 plaintext: " + decryptedRc4Plaintext);
#endregion
#region 哈希算法示例
// MD5 示例
string md5Plaintext = "Hello, MD5!";
string md5Hash = CalculateMD5Hash(md5Plaintext);
Console.WriteLine("MD5 hash of 'Hello, MD5!': " + md5Hash);
// SHA1 示例
string sha1Plaintext = "Hello, SHA1!";
string sha1Hash = CalculateSHA1Hash(sha1Plaintext);
Console.WriteLine("SHA1 hash of 'Hello, SHA1!': " + sha1Hash);
// SHA256 示例
string sha256Plaintext = "Hello, SHA256!";
string sha256Hash = CalculateSHA256Hash(sha256Plaintext);
Console.WriteLine("SHA256 hash of 'Hello, SHA256!': " + sha256Hash);
#endregion
}
#region AES加密解密示例
/// <summary>
/// AES 加密方法
/// </summary>
/// <param name="plaintext">plaintext</param>
/// <param name="key">key</param>
/// <param name="iv">iv</param>
/// <returns></returns>
public static byte[] EncryptAES(string plaintext, byte[] key, byte[] iv)
{
IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CTR/PKCS7Padding");
cipher.Init(true, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", key), iv));
return cipher.DoFinal(System.Text.Encoding.UTF8.GetBytes(plaintext));
}
/// <summary>
/// AES 解密方法
/// </summary>
/// <param name="ciphertext">ciphertext</param>
/// <param name="key">key</param>
/// <param name="iv">iv</param>
/// <returns></returns>
public static string DecryptAES(byte[] ciphertext, byte[] key, byte[] iv)
{
IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CTR/PKCS7Padding");
cipher.Init(false, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", key), iv));
byte[] plaintext = cipher.DoFinal(ciphertext);
return System.Text.Encoding.UTF8.GetString(plaintext);
}
#endregion
#region DES 加密解密示例
/// <summary>
/// DES 加密方法
/// </summary>
/// <param name="plaintext">plaintext</param>
/// <param name="key">key</param>
/// <param name="iv">iv</param>
/// <returns></returns>
public static byte[] EncryptDES(string plaintext, byte[] key, byte[] iv)
{
IBufferedCipher cipher = CipherUtilities.GetCipher("DES/CBC/PKCS7Padding");
cipher.Init(true, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("DES", key), iv));
return cipher.DoFinal(System.Text.Encoding.UTF8.GetBytes(plaintext));
}
/// <summary>
/// DES 解密方法
/// </summary>
/// <param name="ciphertext">ciphertext</param>
/// <param name="key">key</param>
/// <param name="iv">iv</param>
/// <returns></returns>
public static string DecryptDES(byte[] ciphertext, byte[] key, byte[] iv)
{
IBufferedCipher cipher = CipherUtilities.GetCipher("DES/CBC/PKCS7Padding");
cipher.Init(false, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("DES", key), iv));
byte[] plaintext = cipher.DoFinal(ciphertext);
return System.Text.Encoding.UTF8.GetString(plaintext);
}
#endregion
#region RC4 加密解密示例
/// <summary>
/// RC4 加密方法
/// </summary>
/// <param name="plaintext">plaintext</param>
/// <param name="key">key</param>
/// <returns></returns>
public static byte[] EncryptRC4(string plaintext, byte[] key)
{
IStreamCipher cipher = new RC4Engine();
cipher.Init(true, new KeyParameter(key));
byte[] data = System.Text.Encoding.UTF8.GetBytes(plaintext);
byte[] ciphertext = new byte[data.Length];
cipher.ProcessBytes(data, 0, data.Length, ciphertext, 0);
return ciphertext;
}
/// <summary>
/// RC4 解密方法
/// </summary>
/// <param name="ciphertext">ciphertext</param>
/// <param name="key">key</param>
/// <returns></returns>
public static string DecryptRC4(byte[] ciphertext, byte[] key)
{
IStreamCipher cipher = new RC4Engine();
cipher.Init(false, new KeyParameter(key));
byte[] plaintext = new byte[ciphertext.Length];
cipher.ProcessBytes(ciphertext, 0, ciphertext.Length, plaintext, 0);
return System.Text.Encoding.UTF8.GetString(plaintext);
}
#endregion
#region 哈希算法示例
/// <summary>
/// 计算 MD5 哈希
/// </summary>
/// <param name="input">input</param>
/// <returns></returns>
public static string CalculateMD5Hash(string input)
{
IDigest digest = new MD5Digest();
byte[] hash = new byte[digest.GetDigestSize()];
byte[] data = System.Text.Encoding.UTF8.GetBytes(input);
digest.BlockUpdate(data, 0, data.Length);
digest.DoFinal(hash, 0);
return Convert.ToBase64String(hash);
}
/// <summary>
/// 计算 SHA1 哈希
/// </summary>
/// <param name="input">input</param>
/// <returns></returns>
public static string CalculateSHA1Hash(string input)
{
IDigest digest = new Sha1Digest();
byte[] hash = new byte[digest.GetDigestSize()];
byte[] data = System.Text.Encoding.UTF8.GetBytes(input);
digest.BlockUpdate(data, 0, data.Length);
digest.DoFinal(hash, 0);
return Convert.ToBase64String(hash);
}
/// <summary>
/// 计算 SHA256 哈希
/// </summary>
/// <param name="input">input</param>
/// <returns></returns>
public static string CalculateSHA256Hash(string input)
{
IDigest digest = new Sha256Digest();
byte[] hash = new byte[digest.GetDigestSize()];
byte[] data = System.Text.Encoding.UTF8.GetBytes(input);
digest.BlockUpdate(data, 0, data.Length);
digest.DoFinal(hash, 0);
return Convert.ToBase64String(hash);
}
#endregion
}
输出结果:

项目源码地址
更多项目实用功能和特性欢迎前往项目开源地址查看,别忘了给项目一个Star支持。
优秀项目和框架精选
该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没)。
https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md
DotNetGuide技术社区交流群
- DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
- 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
- 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。
C#版开源免费的Bouncy Castle密码库的更多相关文章
- Bouncy Castle密码算法库
Bouncy Castle密码算法库 一.开发背景 Bouncy Castle 是一种用于 Java 平台的开放源码的轻量级密码术包.它支持大量的密码术算法,并提供 JCE 1.2.1 的实现.因为 ...
- 开源免费的C/C++网络库(c/c++ sockets library)
(1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨平台. http://www.cs.wustl.edu/~schmidt/ACE.html (2)Asio Asio基于Boo ...
- 开源免费的C/C++网络库(c/c++ sockets library)补充
(1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨平台. http://www.cs.wustl.edu/~schmidt/ACE.html (2)Asio Asio基于Boo ...
- 开源免费的C/C++网络库(c/c++ sockets library)(转)
原文转自 http://blog.csdn.net/weiwangchao_/article/details/8730199 (1)ACE 庞大.复杂,适合大型项目.开源.免费,不依赖第三方库,支持跨 ...
- 4款开源免费的数据可视化JavaScript库
概述:交互式数据可视化在很大程度上取决于JavaScript库的任务能力.在这篇文章中,我们将看看四个JavaScript库:D3,InfoVis,Processing.js,和Recline.js. ...
- 用Bouncy Castle的C#版API产生公钥和私钥
开源API链接地址:The Legion of the Bouncy Castle Bouncy Castle,简称为BC,原本是java的一个开源JCE提供者,后来也提供了C#版本的API,我下载其 ...
- 开源免费的HTML5游戏引擎——青瓷引擎(QICI Engine) 1.0正式版发布了!
青瓷引擎的成长 青瓷引擎自2015年4月项目启动开始,7月首次亮相2015年ChinaJoy,便得到业界的极大关注,随后开启限量测试,收到数百个开发者团队的试用申请及反馈,期间经历了18个内测版本,完 ...
- 开源免费ERP/CRM/SCM:iDempiere 2.0 安装配置
首先简单介绍一下iDempiere:iDempiere是一款Java平台的基于Compiere/ADempiere的开源企业级开源ERP/CRM/SCM系统, 由于是在ADempiere基础上用O ...
- 打造一个上传图片到图床利器的插件(Mac版 开源)
写markdown博客如何将截图快速上传到图床--记一个工具插件的实现(windows版 开源)(2017-05-31 20:23) 打造一个上传图片到图床利器的插件 鉴于写博客截图手动上传到图床的步 ...
- 微软 Visual Studio 2017 中文正式版下载 – 免费社区版/专业版/企业版
作为“宇宙最强”的集成开发环境 IDE,微软的 Visual Studio 不仅破天荒发布了 macOS 版本,如今终于也推出了其 Windows 的最新版本—— VS 2017 正式版了.这对开发者 ...
随机推荐
- 强化学习基础篇[2]:SARSA、Q-learning算法简介、应用举例、优缺点分析
强化学习基础篇[2]:SARSA.Q-learning算法简介.应用举例.优缺点分析 1.SARSA SARSA(State-Action-Reward-State-Action)是一个学习马尔可夫决 ...
- python随机种子seed的作用(强化学习常用到)
先上代码 import math import gym from gym import spaces, logger from gym.utils import seeding import nump ...
- DDR5能给PC带来怎样提升?我们用12款软件进行了对比测试
结论前置:我们使用了12款专业测试软件,分别对DDR5与DDR4内存,在相同平台下进行了测试体验:酷睿i9-12900K搭配DDR4与DDR5,总体差距并不是很大:在y-cruncher测试中,DDR ...
- Nodepad++格式化XML和JSON字符串
(一)格式化XML 1.安装XML Tools 在notepad++中点击菜单栏[插件]-[插件管理]. 在插件管理界面选择[XML Tools],点击[安装]. 2.打开XML文件 在notepad ...
- Linux-grep或和与操作
一.或(or)操作1.使用选项 -Egrep -E 'a1|a2'filename // 找出文件(filename)中包含a1或者包含a2的行 2.使用egrepegrep 'a1|a2' file ...
- Spring的接口集合注入功能
Spring的接口集合注入功能 对于Spring中已经注入的bean, 可以使用Autowired, 通过Map<String, BeanInterface>或List<BeanIn ...
- 建立DNS隧道绕过校园网认证
建立DNS隧道绕过校园网认证 因为之前在本科的时候破解过校园网三次,主要就是利用其业务逻辑上的漏洞.53端口未过滤包.重放攻击的手段,然后就是一个博弈的过程,这三次加起来用了大概有一年的时间就被完全堵 ...
- vue项目设置favicon
1.准备一个favicon.ico 放在项目的static文件夹下: 2.修改打包配置 开发环境 修改build/webpack.dev.conf.js,找到new HtmlWebpackPlugin ...
- Java序列化(Serializable)与反序列化详解
什么是序列化? Java序列化是在JDK 1.1中引入的,是Java内核的重要特性之一. Java序列化API允许我们将一个对象转换为流,并通过网络发送,或将其存入文件或数据库以便未来使用, 反序列化 ...
- P1481魔族密码 题解(字典树)
魔族密码 题目背景 风之子刚走进他的考场,就-- 花花:当当当当~~偶是魅力女皇--花花!!^^(华丽出场,礼炮,鲜花) 风之子:我呕--(杀死人的眼神)快说题目!否则---_-### 题目描述 花花 ...