前言
今天给大家分享一款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的资料请关注代码网其它相关文章!
发表评论