C#版开源免费的Bouncy Castle密码库
<h2 data-tool="mdnice编辑器">前言</h2><p data-tool="mdnice编辑器">今天大姚给大家分享一款C#版开源、免费的Bouncy Castle密码库:BouncyCastle。</p>
<h2 data-tool="mdnice编辑器">项目介绍</h2>
<p data-tool="mdnice编辑器">BouncyCastle是一款C#版开源、免费的Bouncy Castle密码库,开发人员可以通过该项目在他们的 C# 应用程序中使用 Bouncy Castle 提供的各种密码学功能,从而加强数据的安全性和保护隐私信息。</p>
<h2 data-tool="mdnice编辑器">Bouncy Castle介绍</h2>
<p data-tool="mdnice编辑器">Bouncy Castle是一个流行的密码学库,提供了广泛的密码算法和协议的实现(包括对称加密、非对称加密、哈希函数、数字签名等)。它由澳大利亚注册的慈善组织“Bouncy Castle军团”开发,旨在提供可靠而安全的加密解决方案。</p>
<h2 data-tool="mdnice编辑器">项目源代码</h2>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202403/1336199-20240312195217049-1534668567.png" alt="" loading="lazy"></p>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202403/1336199-20240312195221705-1951799451.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">创建控制台应用</h2>
<p data-tool="mdnice编辑器">创建一个名为:<code>BouncyCastleExercise</code>的控制台。</p>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202403/1336199-20240312195236705-196640416.png" alt="" loading="lazy"></p>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202403/1336199-20240312195240906-389580484.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">安装BouncyCastle包</h2>
<p data-tool="mdnice编辑器">搜索名为:<code>BouncyCastle.Cryptography</code>包安装:</p>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202403/1336199-20240312195253021-979221065.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">BouncyCastle使用示例</h2>
<pre data-tool="mdnice编辑器"><span data-lazy-bgimg="https://mmbiz.qpic.cn/mmbiz_svg/9M0PhLTmTIfnJACqtiacDtg71LH7EnBco5KY033iaF0UzJZeYkRwM8icuF4fmeZBvtIMcSj578tI5GonK5TVHopZdqq6hvuJxDM/640?wx_fmt=svg&from=appmsg" data-fail="0"><code> internal class Program<br> {<br> static void Main(string[] args)<br> {<br> #region AES加密解密示例<br><br> string aesPlaintext = "Hello, 追逐时光者!!!";<br> byte[] aesKey = new byte;<br> byte[] aesIV = new byte;<br> byte[] aesCiphertext = EncryptAES(aesPlaintext, aesKey, aesIV);<br> string decryptedAesPlaintext = DecryptAES(aesCiphertext, aesKey, aesIV);<br><br> Console.WriteLine("AES plaintext: " + aesPlaintext);<br> Console.WriteLine("AES ciphertext: " + Convert.ToBase64String(aesCiphertext));<br> Console.WriteLine("Decrypted AES plaintext: " + decryptedAesPlaintext);<br><br> #endregion<br><br> #region DES 加密解密示例<br><br> string desPlaintext = "Hello, DES!";<br> byte[] desKey = new byte;<br> byte[] desIV = new byte;<br><br> byte[] desCiphertext = EncryptDES(desPlaintext, desKey, desIV);<br> string decryptedDesPlaintext = DecryptDES(desCiphertext, desKey, desIV);<br><br> Console.WriteLine("DES plaintext: " + desPlaintext);<br> Console.WriteLine("DES ciphertext: " + Convert.ToBase64String(desCiphertext));<br> Console.WriteLine("Decrypted DES plaintext: " + decryptedDesPlaintext);<br><br> #endregion<br><br> #region RC4 加密解密示例<br><br> string rc4Plaintext = "Hello, RC4!";<br> byte[] rc4Key = new byte;<br><br> byte[] rc4Ciphertext = EncryptRC4(rc4Plaintext, rc4Key);<br> string decryptedRc4Plaintext = DecryptRC4(rc4Ciphertext, rc4Key);<br><br> Console.WriteLine("RC4 plaintext: " + rc4Plaintext);<br> Console.WriteLine("RC4 ciphertext: " + Convert.ToBase64String(rc4Ciphertext));<br> Console.WriteLine("Decrypted RC4 plaintext: " + decryptedRc4Plaintext);<br><br> #endregion<br><br> #region 哈希算法示例<br><br> // MD5 示例<br> string md5Plaintext = "Hello, MD5!";<br> string md5Hash = CalculateMD5Hash(md5Plaintext);<br> Console.WriteLine("MD5 hash of 'Hello, MD5!': " + md5Hash);<br><br> // SHA1 示例<br> string sha1Plaintext = "Hello, SHA1!";<br> string sha1Hash = CalculateSHA1Hash(sha1Plaintext);<br> Console.WriteLine("SHA1 hash of 'Hello, SHA1!': " + sha1Hash);<br><br> // SHA256 示例<br> string sha256Plaintext = "Hello, SHA256!";<br> string sha256Hash = CalculateSHA256Hash(sha256Plaintext);<br> Console.WriteLine("SHA256 hash of 'Hello, SHA256!': " + sha256Hash);<br><br> #endregion<br> }<br><br> #region AES加密解密示例<br><br> /// <summary><br> /// AES 加密方法<br> /// </summary><br> /// <param name="plaintext">plaintext</param><br> /// <param name="key">key</param><br> /// <param name="iv">iv</param><br> /// <returns></returns><br> public static byte[] EncryptAES(string plaintext, byte[] key, byte[] iv)<br> {<br> IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CTR/PKCS7Padding");<br> cipher.Init(true, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", key), iv));<br> return cipher.DoFinal(System.Text.Encoding.UTF8.GetBytes(plaintext));<br> }<br><br> /// <summary><br> /// AES 解密方法<br> /// </summary><br> /// <param name="ciphertext">ciphertext</param><br> /// <param name="key">key</param><br> /// <param name="iv">iv</param><br> /// <returns></returns><br> public static string DecryptAES(byte[] ciphertext, byte[] key, byte[] iv)<br> {<br> IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CTR/PKCS7Padding");<br> cipher.Init(false, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("AES", key), iv));<br> byte[] plaintext = cipher.DoFinal(ciphertext);<br> return System.Text.Encoding.UTF8.GetString(plaintext);<br> }<br><br> #endregion<br><br> #region DES 加密解密示例<br><br> /// <summary><br> /// DES 加密方法<br> /// </summary><br> /// <param name="plaintext">plaintext</param><br> /// <param name="key">key</param><br> /// <param name="iv">iv</param><br> /// <returns></returns><br> public static byte[] EncryptDES(string plaintext, byte[] key, byte[] iv)<br> {<br> IBufferedCipher cipher = CipherUtilities.GetCipher("DES/CBC/PKCS7Padding");<br> cipher.Init(true, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("DES", key), iv));<br> return cipher.DoFinal(System.Text.Encoding.UTF8.GetBytes(plaintext));<br> }<br><br> /// <summary><br> /// DES 解密方法<br> /// </summary><br> /// <param name="ciphertext">ciphertext</param><br> /// <param name="key">key</param><br> /// <param name="iv">iv</param><br> /// <returns></returns><br> public static string DecryptDES(byte[] ciphertext, byte[] key, byte[] iv)<br> {<br> IBufferedCipher cipher = CipherUtilities.GetCipher("DES/CBC/PKCS7Padding");<br> cipher.Init(false, new ParametersWithIV(ParameterUtilities.CreateKeyParameter("DES", key), iv));<br> byte[] plaintext = cipher.DoFinal(ciphertext);<br> return System.Text.Encoding.UTF8.GetString(plaintext);<br> }<br><br> #endregion<br><br> #region RC4 加密解密示例<br><br> /// <summary><br> /// RC4 加密方法<br> /// </summary><br> /// <param name="plaintext">plaintext</param><br> /// <param name="key">key</param><br> /// <returns></returns><br> public static byte[] EncryptRC4(string plaintext, byte[] key)<br> {<br> IStreamCipher cipher = new RC4Engine();<br> cipher.Init(true, new KeyParameter(key));<br> byte[] data = System.Text.Encoding.UTF8.GetBytes(plaintext);<br> byte[] ciphertext = new byte;<br> cipher.ProcessBytes(data, 0, data.Length, ciphertext, 0);<br> return ciphertext;<br> }<br><br> /// <summary><br> /// RC4 解密方法<br> /// </summary><br> /// <param name="ciphertext">ciphertext</param><br> /// <param name="key">key</param><br> /// <returns></returns><br> public static string DecryptRC4(byte[] ciphertext, byte[] key)<br> {<br> IStreamCipher cipher = new RC4Engine();<br> cipher.Init(false, new KeyParameter(key));<br> byte[] plaintext = new byte;<br> cipher.ProcessBytes(ciphertext, 0, ciphertext.Length, plaintext, 0);<br> return System.Text.Encoding.UTF8.GetString(plaintext);<br> }<br><br> #endregion<br><br> #region 哈希算法示例<br><br> /// <summary><br> /// 计算 MD5 哈希<br> /// </summary><br> /// <param name="input">input</param><br> /// <returns></returns><br> public static string CalculateMD5Hash(string input)<br> {<br> IDigest digest = new MD5Digest();<br> byte[] hash = new byte;<br> byte[] data = System.Text.Encoding.UTF8.GetBytes(input);<br> digest.BlockUpdate(data, 0, data.Length);<br> digest.DoFinal(hash, 0);<br> return Convert.ToBase64String(hash);<br> }<br><br> /// <summary><br> /// 计算 SHA1 哈希<br> /// </summary><br> /// <param name="input">input</param><br> /// <returns></returns><br> public static string CalculateSHA1Hash(string input)<br> {<br> IDigest digest = new Sha1Digest();<br> byte[] hash = new byte;<br> byte[] data = System.Text.Encoding.UTF8.GetBytes(input);<br> digest.BlockUpdate(data, 0, data.Length);<br> digest.DoFinal(hash, 0);<br> return Convert.ToBase64String(hash);<br> }<br><br> /// <summary><br> /// 计算 SHA256 哈希<br> /// </summary><br> /// <param name="input">input</param><br> /// <returns></returns><br> public static string CalculateSHA256Hash(string input)<br> {<br> IDigest digest = new Sha256Digest();<br> byte[] hash = new byte;<br> byte[] data = System.Text.Encoding.UTF8.GetBytes(input);<br> digest.BlockUpdate(data, 0, data.Length);<br> digest.DoFinal(hash, 0);<br> return Convert.ToBase64String(hash);<br> }<br><br> #endregion<br><br> }<br></code></span></pre>
<p data-tool="mdnice编辑器"><strong>输出结果:</strong></p>
<div>
<p><img src="https://img2024.cnblogs.com/blog/1336199/202403/1336199-20240312195344495-1899565304.png" alt="" loading="lazy"></p>
<h2 data-tool="mdnice编辑器">项目源码地址</h2>
<p data-tool="mdnice编辑器"><strong>更多项目实用功能和特性欢迎前往项目开源地址查看👀,别忘了给项目一个Star支持💖。</strong></p>
<blockquote>
<p>https://github.com/bcgit/bc-csharp</p>
</blockquote>
<h2 data-tool="mdnice编辑器">优秀项目和框架精选</h2>
<p data-tool="mdnice编辑器">该项目已收录到C#/.NET/.NET Core优秀项目和框架精选中,关注优秀项目和框架精选能让你及时了解C#、.NET和.NET Core领域的最新动态和最佳实践,提高开发工作效率和质量。坑已挖,欢迎大家踊跃提交PR推荐或自荐(<code>让优秀的项目和框架不被埋没🤞</code>)。</p>
<blockquote>
<p>https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.md</p>
</blockquote>
</div>
<h2 id="activity-name" class="rich_media_title ">DotNetGuide技术社区交流群</h2>
<ul>
<li>DotNetGuide技术社区是一个面向.NET开发者的开源技术社区,旨在为开发者们提供全面的C#/.NET/.NET Core相关学习资料、技术分享和咨询、项目推荐、招聘资讯和解决问题的平台。</li>
<li>在这个社区中,开发者们可以分享自己的技术文章、项目经验、遇到的疑难技术问题以及解决方案,并且还有机会结识志同道合的开发者。</li>
<li>我们致力于构建一个积极向上、和谐友善的.NET技术交流平台,为广大.NET开发者带来更多的价值和成长机会。</li>
</ul>
<blockquote>
<p id="activity-name" class="rich_media_title "><strong>欢迎加入DotNetGuide技术社区微信交流群👪</strong></p>
</blockquote>
</div>
<div id="MySignature" role="contentinfo">
<blockquote >
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者名称:</span>追逐时光者</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'><span style='font-size: 17px; '>作者简介:</span>一个热爱编程、善于分享、喜欢学习、探索、尝试新事物和新技术的全栈软件工程师。</p>
<p style='font-family:YouYuan;font-size: 16px;margin: 0 auto 0.01em auto;'>
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。如果该篇文章对您有帮助的话,可以点一下右下角的【♥推荐♥】,希望能够持续的为大家带来好的技术文章,文中可能存在描述不正确的地方,欢迎指正或补充,不胜感激。
</p>
</blockquote><br><br>
来源:https://www.cnblogs.com/Can-daydayup/p/18069116
頁:
[1]