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 正式版了.这对开发者 ...
随机推荐
- SqlSugar子查询
1.基础教程 1.1 API目录 *****只查一列***** //First: SqlFunc.Subqueryable<School>().Where(s => s.Id == ...
- 3.1 C++ STL 双向队列容器
双向队列容器(Deque)是C++ STL中的一种数据结构,是一种双端队列,允许在容器的两端进行快速插入和删除操作,可以看作是一种动态数组的扩展,支持随机访问,同时提供了高效的在队列头尾插入和删除元素 ...
- C# 多线程与线程扫描器
多线程是一种复杂的编程技术,可以同时运行多个独立的线程来处理各种任务.在C#中,可以使用Thread类和ThreadPool类来实现多线程编程.Thread类用于创建和控制线程.可以使用Thread. ...
- 【分享】从Mybatis源码中,学习到的10种设计模式
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言:小镇卷码家 总有不少研发伙伴问小傅哥:"为什么学设计模式.看框架源码.补技 ...
- 遥感图像处理笔记之【Automatic Flood Detection from Satellite Images Using Deep Learning】
遥感图像处理学习(7) 前言 遥感系列第7篇.遥感图像处理方向的学习者可以参考或者复刻 本文初编辑于2023年12月29日 2024年1月24日搬运至本人博客园平台 文章标题:Automatic Fl ...
- Mygin上下文之sync.Pool复用
sync.Pool 的作用 先看看官方文档怎样说的吧,我截取了官方文档的第一句. // A Pool is a set of temporary objects that may be individ ...
- 【动态内存】C语言动态内存管理及使用总结篇【初学者保姆级福利】
动态内存管理及应用总结篇 一篇博客学好动态内存的管理和使用 这篇博客干货满满,建议收藏再看哦!! 求个赞求个赞求个赞求个赞 谢谢 先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点 ...
- ch57x/ch58x开启仿真
本次使用的平台是MounRiver Studio,使用的是WCH的CH582m与WCH-LinkE 仿真之前确保LinkE处在Risc-V模式下 空闲时蓝灯常灭 Step1:首先通过ISP工具开启两 ...
- ElasticSearch7.3学习(三)----采用restful风格 批量(bulk)增删改
Bulk 操作是将文档的增删改查一些列操作,通过一次请求全都做完.目的是减少网络传输次数. 语法: POST /_bulk {"action": {"metadata&q ...
- JS leetcode x 的平方根 题解分析
壹 ❀ 引 这几天心情复杂,也不知道形容.做道题吧,其实是上周的题,一直没整理,比较巧的是,这也是我同学17年去PPTV面试时遇到的一题,题目来自leetcode69. x 的平方根,题目描述如下: ...