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

DotNetGuide技术社区交流群

  • DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。
  • 在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。
  • 我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。

欢迎加入DotNetGuide技术社区微信交流群👪

相关推荐
追逐时光者5 小时前
3款.NET开源、功能强大的通讯调试工具,效率提升利器!
【.net】·【c#】·【开源项目】
追逐时光者1 天前
C#/.NET/.NET Core技术前沿周刊 | 第 18 期(2024年12.16-12.22)
【.net】·【c#】·【.net core】·【技术前沿周刊】
追逐时光者3 天前
C#字符串拼接的几种方式及其性能分析对比
【.net】·【c#】·【.net core】·【拾遗补漏】
追逐时光者4 天前
一个.NET开源、易于使用的屏幕录制工具
【.net】·【开源项目】
追逐时光者6 天前
好消息,在 Visual Studio 中可以免费使用 GitHub Copilot 了!
【visual studio】·【.net】·【c#】·【实用工具】·【ai编程】
追逐时光者7 天前
基于.NET WinForm开发的一款硬件及协议通讯工具
【.net】·【开源项目】·【winform】
追逐时光者8 天前
一款基于 .NET MVC 框架开发、功能全面的MES系统
【.net】·【c#】·【开源项目】·【.net core】
追逐时光者9 天前
C#/.NET/.NET Core技术前沿周刊 | 第 17 期(2024年12.09-12.15)
【.net】·【c#】·【.net core】·【技术前沿周刊】
追逐时光者10 天前
C#正则表达式快速入门
【.net】·【c#】·【.net core】·【拾遗补漏】
追逐时光者10 天前
推荐几个不错的数据库设计工具
【实用工具】