前言
今天给大家分享一款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 }
输出结果:
项目源码地址
https://github.com/bcgit/bc-csharp
以上就是c#中免费密码库bouncycastle的使用详解的详细内容,更多关于c# bouncycastle的资料请关注代码网其它相关文章!
发表评论