C#中免費(fèi)密碼庫(kù)BouncyCastle的使用詳解
前言
今天給大家分享一款C#版開源、免費(fèi)的Bouncy Castle密碼庫(kù):BouncyCastle。
項(xiàng)目介紹
BouncyCastle是一款C#版開源、免費(fèi)的Bouncy Castle密碼庫(kù),開發(fā)人員可以通過該項(xiàng)目在他們的 C# 應(yīng)用程序中使用 Bouncy Castle 提供的各種密碼學(xué)功能,從而加強(qiáng)數(shù)據(jù)的安全性和保護(hù)隱私信息。
Bouncy Castle介紹
Bouncy Castle是一個(gè)流行的密碼學(xué)庫(kù),提供了廣泛的密碼算法和協(xié)議的實(shí)現(xiàn)(包括對(duì)稱加密、非對(duì)稱加密、哈希函數(shù)、數(shù)字簽名等)。它由澳大利亞注冊(cè)的慈善組織“Bouncy Castle軍團(tuán)”開發(fā),旨在提供可靠而安全的加密解決方案。
項(xiàng)目源代碼


創(chuàng)建控制臺(tái)應(yīng)用
創(chuàng)建一個(gè)名為:BouncyCastleExercise的控制臺(tái)。


安裝BouncyCastle包
搜索名為:BouncyCastle.Cryptography包安裝:

BouncyCastle使用示例
internal class Program
{
static void Main(string[] args)
{
#region AES加密解密示例
string aesPlaintext = "Hello, 追逐時(shí)光者?。?!";
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>
/// 計(jì)算 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>
/// 計(jì)算 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>
/// 計(jì)算 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
}輸出結(jié)果:

項(xiàng)目源碼地址
https://github.com/bcgit/bc-csharp
以上就是C#中免費(fèi)密碼庫(kù)BouncyCastle的使用詳解的詳細(xì)內(nèi)容,更多關(guān)于C# BouncyCastle的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#程序員應(yīng)該養(yǎng)成的程序性能優(yōu)化寫法
工作和生活中經(jīng)常可以看到一些程序猿,寫代碼的時(shí)候只關(guān)注代碼的邏輯性,而不考慮運(yùn)行效率,其實(shí)這對(duì)大多數(shù)程序猿來說都是沒有問題的,不過作為一只有理想的CodeMonkey,我還是希望給大家分享一些性能優(yōu)化心得2017-08-08
c#基于Win32Api實(shí)現(xiàn)返回Windows桌面功能
本文分享下回到桌面功能的實(shí)現(xiàn)方法,效果與快捷鍵(Win+D)相同。有此需求的朋友可以參考下2021-05-05
DevExpress實(shí)現(xiàn)自定義TreeListNode的Tooltip的方法
這篇文章主要介紹了DevExpress實(shí)現(xiàn)自定義TreeListNode的Tooltip的方法,需要的朋友可以參考下2014-08-08
c# 使用Task實(shí)現(xiàn)非阻塞式的I/O操作
這篇文章主要介紹了c# 使用Task實(shí)現(xiàn)非阻塞式的I/O操作,幫助大家更好的理解和學(xué)習(xí)c# 編程語言,感興趣的朋友可以了解下2020-11-11

