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支持💖。

https://github.com/bcgit/bc-csharp

优秀项目和框架精选

该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(让优秀的项目和框架不被埋没🤞)。

https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言自学笔记7----C 语言 break和continue语句

C 语言 break和continue语句 C 语言 break break语句在遇到循环时将立即结束循环。其语法为&#xff1a; break; break语句几乎总是与if…else循环内的语句一起使用。 示例1&#xff1a;break语句 //程序计算最多10个数字的总和 //如果输入负数&#xff0c;则循环终止 includ…

虚幻4 | 制作游戏——学习记录(一)

1. 启动Epic后下载虚幻4&#xff0c;打开虚幻4后新建一个第三人称游戏项目&#xff0c;效果如下&#xff1a; &#xff08;1&#xff09;内容/ThirdPersonBP/Blueprints中的ThirdPersonCharacter&#xff08;左下角人物&#xff09; 这是模板中使用的主要蓝图类&#xff0c;它…

在Centos7.9上安装openGauss与配置

Centos7.9 安装与配置 一、 Vmware 虚拟机安装&#xff08;安装版本为 VMware Workstation 16 Pro&#xff09; 先去官网下载&#xff1a;Download VMware Workstation Pro 运行下载完成的 Vmware Workstation 虚拟机软件包。 一切准备就绪后&#xff0c;单击“升级”按钮。…

ABAP接口部分-C#调用RFC

目录 ABAP接口部分-C#调用RFC创建表结构创建RFC函数创建C#项目引用SAP .Net Connector包绘制窗口的控件最终布局代码 项目配置报错SAP.Middleware.Connector.RfcDestinationManager报错SAP.Middleware.Connector.RfcLoginexception报错SAP.Middleware.Connector.RfcInvalidStat…

odoo shell交互和调试

Odoo提供了一个强大的框架来帮助企业管理他们的业务流程。以下是您提到的几个关键功能的详细解释和代码示例。 1. 自动重载和 --dev 选项 在开发Odoo模块时&#xff0c;您可能希望对代码进行修改并立即看到效果&#xff0c;而不需要重启整个服务。Odoo提供了自动重载机制来实…

集合实现类研究底层(部分):手撕ArrayList底层源码、手撕LinkedList底层源码、手写单向链表和双向链表

day26上 集合框架图 标绿已经学习底层&#xff0c;深入底层主要是研究实现类底层 继承关系图 手撕ArrayList底层源码 ps:研究添加元素的过程 思路&#xff1a; 1.研究继承关系 2.研究属性 3.理解创建集合的过程 – 构造方法的底层原理 4.研究添加元素的过程 提升&#xff1a…

.a .so .bin 文件格式分析--文件格式是32位还是64位,数据是大端还是小端,运行在 arm 上还是 x86上

可通过readelf指令&#xff0c;分析文.a .so .bin 文件是在什么系统上编译的&#xff0c;文件格式是32位还是64位&#xff0c;数据是大端还是小端&#xff0c;运行在 arm 上还是 x86上 1&#xff1a;格式读取说明 通过 readelf -a libbrd.a 读取文件的格式内容 File: libbrd…

BUGKU-WEB ezbypass

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 代码审计题目发现需要构造一个字符串&#xff0c;使得它不包含字母、数字、特殊字符的PHP代码片段&#xff0c;长度小于105&#xff0c;然后传递给$codepost提交参数&#xff0c;eval&#xff08;&…

数仓基础理论(一)

数据仓库概念 数据库 vs 数据仓库 从数据来源进行区分 数据库&#xff1a;企业中基础核心的业务数据 数据仓库&#xff1a;数据库中的数据 从数据存储进行区分 数据库&#xff1a;核心作用就是查找业务数据&#xff0c;基本上行式存储(带有索引)&#xff0c;基本上无法存…

大模型学习笔记六:Semantic Kernel

文章目录 一、Semantic Kernel介绍和发展1&#xff09;SK 的语言开发进展2&#xff09;SK的生态位3&#xff09;SK基础架构 二、环境搭建1&#xff09;初始化2&#xff09;Semantic Functions&#xff08;不用编写代码&#xff0c;用配置实现回调函数&#xff09;3&#xff09;…

js的异常处理

1、throw抛异常 throw抛出异常信息&#xff0c;程序也会终止执行&#xff1b; throw后面跟的是错误提示信息&#xff1b; new Error() 配个throw使用&#xff0c;能设置更详细的错误信息。 function counter(x,y) {if (!x || !y) {throw new Error(参数不能为空)}retu…

Kotlin 数据解析(Gson)

一、添加依赖 build.gradle.kts(:app) // gson数据解析implementation("com.google.code.gson:gson:2.8.6") 对象类&#xff1a; // 对象类 class Account {var uid:String "00001"var userName:String "Freeman"var password:String &quo…

介绍一下左值右值,左值引用和右值引用

先说左值和右值&#xff0c;简单来说可以放到等号左边的值叫做左值&#xff0c;可以放到等号右边的值叫做右值。 详细的说&#xff0c;左值是有明确的地址&#xff0c;是具有名字的&#xff0c;是可以对左值进行取地址操作的&#xff0c;因为它在内存中有明确的地址和名字&…

k8s+wordpress+zabbix+elastic+filebeat+kibana服务搭建以及测试

一&#xff0c;环境&#xff1a;docker&#xff0c;k8s&#xff0c;zabbix&#xff0c;以及搭建worpdress&#xff0c;elasticsearch&#xff0c;filebeat&#xff0c;kibana 二&#xff0c;主机分配&#xff1a; 名称host详述个人博客3192.168.142.133 搭配mysql8.0.36的数据…

DVWA靶场-暴力破解

DVWA是一个适合新手锻炼的靶机&#xff0c;是由PHP/MySQL组成的 Web应用程序&#xff0c;帮助大家了解web应用的攻击手段 DVWA大致能分成以下几个模块&#xff0c;包含了OWASP Top 10大主流漏洞环境。 Brute Force——暴力破解 Command Injection——命令注入 CSRF——跨站请…

SublimeText4 安装

Sublime Text 可以编写html&#xff0c;css&#xff0c;js&#xff0c;php等等&#xff0c;是一个轻量、简洁、高效、跨平台的编辑器。 图1&#xff1a;SublimeText官网 Sublime Text具有漂亮的用户界面和强大的功能&#xff0c;例如代码缩略图&#xff0c;Python的插件&#…

Java的编程之旅41——字符流

目录 1.字符流的简介 2.字符的编码与解码 3.字符流读写操作 1.字符流写入 2.字符流复制文件 4.FileWriter&FileReader 5.缓冲区高效读写 6.序列化与反序列化 1.字符流的简介 在Java中&#xff0c;字符流是用于处理字符数据的输入输出流。它是以字符为单位进行处理&a…

读取txt文件并统计每行最长的单词以及长度

读取txt文件并统计每行最长的单词以及长度 题目 在 D:\\documant.txt 文本中,文件中有若干行英文文本,每行英文文本中有若干个单词&#xff0c;每个单词不会跨行出现每行至多包含100个字符,要求编写一个程序,处理文件,分析各行中的单词,找到每行中的最长单词&#xff0c;分别…

Git的常用操作命令

Git是一个分布式版本控制系统&#xff0c;广泛应用于软件开发项目中来追踪和控制代码的修改历史。 Git常用命令如下&#xff1a; 配置用户信息&#xff1a; # 设置全局用户名和邮箱 git config --global user.name "Your Name" git config --global user.email &quo…

MediaCodec源码分析 Codec消息轮转

前言 本文梳理MediaCodec的消息轮转流程,基于7.0代码。 MediaCodec底层实现为JMediaCodec、MediaCodec.cpp、ACodec,他们之间是通过media包下的ALooper、AHandler、AMeesage这一套机制进行线程间通信的。 本文就是分析这里的流程,先分析ALooper这一套,然后再分析MediaCod…