前言
今天大姚给大家分享一款C#版开源、免费的Bouncy Castle密码库:BouncyCastle。
项目介绍
BouncyCastle是一款C#版开源、免费的Bouncy Castle密码库,开发人员可以通过该项目在他们的 C# 应用程序中使用 Bouncy Castle 提供的各种密码学功能,从而加强数据的安全性和保护隐私信息。
Bouncy Castle介绍
Bouncy Castle是一个流行的密码学库,提供了广泛的密码算法和协议的实现(包括对称加密、非对称加密、哈希函数、数字签名等)。它由澳大利亚注册的慈善组织“Bouncy Castle军团”开发,旨在提供可靠而安全的加密解决方案。
项目源代码
创建控制台应用
创建一个名为:BouncyCastleExercise
的控制台。
安装BouncyCastle包
搜索名为:BouncyCastle.Cryptography
包安装:
BouncyCastle使用示例
internalclassProgram
{
staticvoidMain(string[]args)
{
#regionAES加密解密示例
stringaesPlaintext="Hello, 追逐时光者!!!";
byte[]aesKey=newbyte[16];
byte[]aesIV=newbyte[16];
byte[]aesCiphertext=EncryptAES(aesPlaintext,aesKey,aesIV);
stringdecryptedAesPlaintext=DecryptAES(aesCiphertext,aesKey,aesIV);
Console.WriteLine("AESplaintext:"+aesPlaintext);
Console.WriteLine("AESciphertext:"+Convert.ToBase64String(aesCiphertext));
Console.WriteLine("DecryptedAESplaintext:"+decryptedAesPlaintext);
#endregion
#regionDES加密解密示例
stringdesPlaintext="Hello,DES!";
byte[]desKey=newbyte[8];
byte[]desIV=newbyte[8];
byte[]desCiphertext=EncryptDES(desPlaintext,desKey,desIV);
stringdecryptedDesPlaintext=DecryptDES(desCiphertext,desKey,desIV);
Console.WriteLine("DESplaintext:"+desPlaintext);
Console.WriteLine("DESciphertext:"+Convert.ToBase64String(desCiphertext));
Console.WriteLine("DecryptedDESplaintext:"+decryptedDesPlaintext);
#endregion
#regionRC4加密解密示例
stringrc4Plaintext="Hello,RC4!";
byte[]rc4Key=newbyte[16];
byte[]rc4Ciphertext=EncryptRC4(rc4Plaintext,rc4Key);
stringdecryptedRc4Plaintext=DecryptRC4(rc4Ciphertext,rc4Key);
Console.WriteLine("RC4plaintext:"+rc4Plaintext);
Console.WriteLine("RC4ciphertext:"+Convert.ToBase64String(rc4Ciphertext));
Console.WriteLine("DecryptedRC4plaintext:"+decryptedRc4Plaintext);
#endregion
#region哈希算法示例
//MD5示例
stringmd5Plaintext="Hello,MD5!";
stringmd5Hash=CalculateMD5Hash(md5Plaintext);
Console.WriteLine("MD5hashof'Hello,MD5!':"+md5Hash);
//SHA1示例
stringsha1Plaintext="Hello,SHA1!";
stringsha1Hash=CalculateSHA1Hash(sha1Plaintext);
Console.WriteLine("SHA1hashof'Hello,SHA1!':"+sha1Hash);
//SHA256示例
stringsha256Plaintext="Hello,SHA256!";
stringsha256Hash=CalculateSHA256Hash(sha256Plaintext);
Console.WriteLine("SHA256hashof'Hello,SHA256!':"+sha256Hash);
#endregion
}
#regionAES加密解密示例
///
///AES加密方法
///
///plaintext
///key
///iv
///
publicstaticbyte[]EncryptAES(stringplaintext,byte[]key,byte[]iv)
{
IBufferedCiphercipher=CipherUtilities.GetCipher("AES/CTR/PKCS7Padding");
cipher.Init(true,newParametersWithIV(ParameterUtilities.CreateKeyParameter("AES",key),iv));
returncipher.DoFinal(S服务器托管网ystem.Text.Encoding.UTF8.GetBytes(plaintext));
}
///
///AES解密方法
///
///ciphertext
///key
///iv
///
publicstaticstringDecryptAES(byte[]ciphertext,byte[]key,byte[]iv)
{
IBufferedCiphercipher=CipherUtilities.GetCipher("AES/CTR/PKCS7Padding");
cipher.Init(服务器托管网false,newParametersWithIV(ParameterUtilities.CreateKeyParameter("AES",key),iv));
byte[]plaintext=cipher.DoFinal(ciphertext);
returnSystem.Text.Encoding.UTF8.GetString(plaintext);
}
#endregion
#regionDES加密解密示例
///
///DES加密方法
///
///plaintext
///key
///iv
///
publicstaticbyte[]EncryptDES(stringplaintext,byte[]key,byte[]iv)
{
IBufferedCiphercipher=CipherUtilities.GetCipher("DES/CBC/PKCS7Padding");
cipher.Init(true,newParametersWithIV(ParameterUtilities.CreateKeyParameter("DES",key),iv));
returncipher.DoFinal(System.Text.Encoding.UTF8.GetBytes(plaintext));
}
///
///DES解密方法
///
///ciphertext
///key
///iv
///
publicstaticstringDecryptDES(byte[]ciphertext,byte[]key,byte[]iv)
{
IBufferedCiphercipher=CipherUtilities.GetCipher("DES/CBC/PKCS7Padding");
cipher.Init(false,newParametersWithIV(ParameterUtilities.CreateKeyParameter("DES",key),iv));
byte[]plaintext=cipher.DoFinal(ciphertext);
returnSystem.Text.Encoding.UTF8.GetString(plaintext);
}
#endregion
#regionRC4加密解密示例
///
///RC4加密方法
///
///plaintext
///key
///
publicstaticbyte[]EncryptRC4(stringplaintext,byte[]key)
{
IStreamCiphercipher=newRC4Engine();
cipher.Init(true,newKeyParameter(key));
byte[]data=System.Text.Encoding.UTF8.GetBytes(plaintext);
byte[]ciphertext=newbyte[data.Length];
cipher.ProcessBytes(data,0,data.Length,ciphertext,0);
returnciphertext;
}
///
///RC4解密方法
///
///ciphertext
///key
///
publicstaticstringDecryptRC4(byte[]ciphertext,byte[]key)
{
IStreamCiphercipher=newRC4Engine();
cipher.Init(false,newKeyParameter(key));
byte[]plaintext=newbyte[ciphertext.Length];
cipher.ProcessBytes(ciphertext,0,ciphertext.Length,plaintext,0);
returnSystem.Text.Encoding.UTF8.GetString(plaintext);
}
#endregion
#region哈希算法示例
///
///计算MD5哈希
///
///input
///
publicstaticstringCalculateMD5Hash(stringinput)
{
IDigestdigest=newMD5Digest();
byte[]hash=newbyte[digest.GetDigestSize()];
byte[]data=System.Text.Encoding.UTF8.GetBytes(input);
digest.BlockUpdate(data,0,data.Length);
digest.DoFinal(hash,0);
returnConvert.ToBase64String(hash);
}
///
///计算SHA1哈希
///
///input
///
publicstaticstringCalculateSHA1Hash(stringinput)
{
IDigestdigest=newSha1Digest();
byte[]hash=newbyte[digest.GetDigestSize()];
byte[]data=System.Text.Encoding.UTF8.GetBytes(input);
digest.BlockUpdate(data,0,data.Length);
digest.DoFinal(hash,0);
returnConvert.ToBase64String(hash);
}
///
///计算SHA256哈希
///
///input
///
publicstaticstringCalculateSHA256Hash(stringinput)
{
IDigestdigest=newSha256Digest();
byte[]hash=newbyte[digest.GetDigestSize()];
byte[]data=System.Text.Encoding.UTF8.GetBytes(input);
digest.BlockUpdate(data,0,data.Length);
digest.DoFinal(hash,0);
returnConvert.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技术社区微信交流群
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net