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 正式版了.这对开发者 ...
随机推荐
- EXPLAIN分析pgsql的性能
EXPLAIN分析pgsql的性能 前言 EXPLAIN命令 EXPLAIN -- 显示一个语句的执行计划 命令详解 EXPLAIN输出结果展示 analyze buffers 全表扫描 索引扫描 位 ...
- Go语言的100个错误使用场景(一)|代码和项目组织
目录 前言 1. Go: Simple to learn but hard to master 1.1 Go 语言概述 1.2 简单不等于容易 1.3 使用 Go 的100个错误 2. Code an ...
- 探索C语言中的Shellcode从提取到执行
ShellCode是一种独立于应用程序的机器代码,通常用于实现特定任务,如执行远程命令.注入恶意软件或利用系统漏洞.在网络安全领域,研究Shellcode是理解恶意软件和提高系统安全性的关键一环.本文 ...
- Apache Typecho框架启用地址重写
地址重写有利于SEO优化,开启地址重写可以去掉Typecho框架中的index.php后缀,该后缀如下. 第一步,进到apache配置文件目录下cat /etc/httpd/conf/httpd.co ...
- Linux进程通信-POSIX IPC
前言 Linux POSIX IPC的可移植性是不如System V IPC的,但是我们只用Linux,并且内核版本高于2.6.6的话就不存在该问题了.也因为POSIX IPC出现的比较晚,借鉴了sy ...
- 下载安装JDK 和 IntelliJ IDEA 和 ActiveMq
wget http://yun.diandaxia.com/other/jdk-8u92-linux-x64.rpm rpm -ivh jdk-8u92-linux-x64.rpm wget http ...
- AT_arc125_c [ARC125C] LIS to Original Sequence 题解
题目传送门 前置知识 贪心 | 构造 解法 对于任意一个未加入序列 \(P\) 的数 \(x<A_{i}(1 \le i \le k-1)\),如果其放在了 \(A_{i}\) 的前面,会导致最 ...
- JS Leetcode 220. 存在重复元素 III 题解分析,暴力解法与桶排序
壹 ❀ 引 今天的题目来自LeetCode 220. 存在重复元素 III,难度中等,题目描述如下: 给你一个整数数组 nums 和两个整数 k 和 t .请你判断是否存在 两个不同下标 i 和 j, ...
- 解决:EXP-00003: 未找到段 (0,0) 的存储定义报错
问题说明 DB服务器oracle版本:11.2.0.4.0 最近在客户端用exp命令导出部分表时报错,如题.搜索了一下,找到以下解决方案: 问题原因 Oracle 11g 有一个参数deferred_ ...
- ALTER TABLE 加字段的时候到底锁不锁表?
Mysql5.6版本之前 更新步骤 对原始表加写锁 按照原始表和执行语句的定义,重新定义一个空的临时表. 对临时表进行添加索引(如果有). 再将原始表中的数据逐条Copy到临时表中. 当原始表中的所有 ...