翼度科技»论坛 编程开发 .net 查看内容

.net中加解密用BouncyCastle就够了,支持常用的各种加密解密算法

5

主题

5

帖子

15

积分

新手上路

Rank: 1

积分
15
BouncyCastle 是一个流行的 Java 加解密库,也支持在 .NET 平台上使用。下面是 BouncyCastle 在 .NET 下使用的一些常见功能,包括 AES、RSA、MD5、SHA1、DES、SHA256、SHA384、SHA512 等。
在开始之前,请确保你已经将 BouncyCastle 的 NuGet 包安装到你的项目中。你可以通过 NuGet 包管理器控制台或 Visual Studio 中的 NuGet 包管理器进行安装。
  1. Install-Package BouncyCastle
复制代码
接下来,我将演示如何使用 BouncyCastle 实现一些常见的加解密操作。
1. AES 加解密
  1. using System;
  2. using System.Text;
  3. using Org.BouncyCastle.Crypto;
  4. using Org.BouncyCastle.Crypto.Engines;
  5. using Org.BouncyCastle.Crypto.Modes;
  6. using Org.BouncyCastle.Crypto.Parameters;
  7. public class AesExample
  8. {
  9.     public static byte[] Encrypt(string plaintext, byte[] key, byte[] iv)
  10.     {
  11.         CipherEngine engine = new CipherEngine();
  12.         CipherParameters keyParam = new KeyParameter(key);
  13.         ParametersWithIV keyParamWithIV = new ParametersWithIV(keyParam, iv);
  14.         engine.Init(true, keyParamWithIV);
  15.         byte[] input = Encoding.UTF8.GetBytes(plaintext);
  16.         byte[] output = new byte[engine.GetOutputSize(input.Length)];
  17.         int len = engine.ProcessBytes(input, 0, input.Length, output, 0);
  18.         engine.DoFinal(output, len);
  19.         return output;
  20.     }
  21.     public static string Decrypt(byte[] ciphertext, byte[] key, byte[] iv)
  22.     {
  23.         CipherEngine engine = new CipherEngine();
  24.         CipherParameters keyParam = new KeyParameter(key);
  25.         ParametersWithIV keyParamWithIV = new ParametersWithIV(keyParam, iv);
  26.         engine.Init(false, keyParamWithIV);
  27.         byte[] output = new byte[engine.GetOutputSize(ciphertext.Length)];
  28.         int len = engine.ProcessBytes(ciphertext, 0, ciphertext.Length, output, 0);
  29.         engine.DoFinal(output, len);
  30.         return Encoding.UTF8.GetString(output);
  31.     }
  32. }
  33. // 示例用法
  34. byte[] aesKey = new byte[16]; // AES 128-bit key
  35. byte[] aesIV = new byte[16];  // AES 128-bit IV
  36. string plaintext = "Hello, BouncyCastle!";
  37. byte[] ciphertext = AesExample.Encrypt(plaintext, aesKey, aesIV);
  38. string decryptedText = AesExample.Decrypt(ciphertext, aesKey, aesIV);
  39. Console.WriteLine($"Plaintext: {plaintext}");
  40. Console.WriteLine($"Ciphertext: {Convert.ToBase64String(ciphertext)}");
  41. Console.WriteLine($"Decrypted Text: {decryptedText}");
复制代码
2. RSA 加解密
  1. using System;
  2. using System.Text;
  3. using Org.BouncyCastle.Crypto;
  4. using Org.BouncyCastle.Crypto.Encodings;
  5. using Org.BouncyCastle.Crypto.Engines;
  6. using Org.BouncyCastle.Crypto.Parameters;
  7. using Org.BouncyCastle.Security;
  8. public class RsaExample
  9. {
  10.     public static byte[] Encrypt(string plaintext, AsymmetricKeyParameter publicKey)
  11.     {
  12.         CipherEngine engine = new CipherEngine();
  13.         engine.Init(true, publicKey);
  14.         byte[] input = Encoding.UTF8.GetBytes(plaintext);
  15.         byte[] output = engine.ProcessBytes(input, 0, input.Length);
  16.         return output;
  17.     }
  18.     public static string Decrypt(byte[] ciphertext, AsymmetricKeyParameter privateKey)
  19.     {
  20.         CipherEngine engine = new CipherEngine();
  21.         engine.Init(false, privateKey);
  22.         byte[] output = engine.ProcessBytes(ciphertext, 0, ciphertext.Length);
  23.         return Encoding.UTF8.GetString(output);
  24.     }
  25. }
  26. // 示例用法
  27. RsaKeyPairGenerator rsaKeyPairGen = GeneratorUtilities.GetKeyPairGenerator("RSA");
  28. rsaKeyPairGen.Init(new KeyGenerationParameters(new SecureRandom(), 2048)); // 2048-bit key size
  29. AsymmetricCipherKeyPair keyPair = rsaKeyPairGen.GenerateKeyPair();
  30. AsymmetricKeyParameter publicKey = keyPair.Public;
  31. AsymmetricKeyParameter privateKey = keyPair.Private;
  32. string plaintext = "Hello, BouncyCastle!";
  33. byte[] ciphertext = RsaExample.Encrypt(plaintext, publicKey);
  34. string decryptedText = RsaExample.Decrypt(ciphertext, privateKey);
  35. Console.WriteLine($"Plaintext: {plaintext}");
  36. Console.WriteLine($"Ciphertext: {Convert.ToBase64String(ciphertext)}");
  37. Console.WriteLine($"Decrypted Text: {decryptedText}");
复制代码
3. MD5、SHA1、SHA256、SHA384、SHA512
  1. using System;
  2. using System.Security.Cryptography;
  3. using System.Text;
  4. using Org.BouncyCastle.Crypto.Digests;
  5. public class HashExample
  6. {
  7.     public static string ComputeMD5(string input)
  8.     {
  9.         MD5 md5 = MD5.Create();
  10.         byte[] hashBytes = md5.ComputeHash(Encoding.UTF8.GetBytes(input));
  11.         return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
  12.     }
  13.     public static string ComputeSHA1(string input)
  14.     {
  15.         SHA1 sha1 = SHA1.Create();
  16.         byte[] hashBytes = sha1.ComputeHash(Encoding.UTF8.GetBytes(input));
  17.         return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
  18.     }
  19.     public static string ComputeSHA256(string input)
  20.     {
  21.         Sha256Digest sha256 = new Sha256Digest();
  22.         byte[] inputBytes = Encoding.UTF8.GetBytes(input);
  23.         sha256.BlockUpdate(inputBytes, 0, inputBytes.Length);
  24.         byte[] hashBytes = new byte[sha256.GetDigestSize()];
  25.         sha256.DoFinal(hashBytes, 0);
  26.         return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
  27.     }
  28.     public static string ComputeSHA384(string input)
  29.     {
  30.         Sha384Digest sha384 = new Sha384Digest();
  31.         byte[] inputBytes = Encoding.UTF8.GetBytes(input);
  32.         sha384.BlockUpdate(inputBytes, 0, inputBytes.Length);
  33.         byte[] hashBytes = new byte[sha384.GetDigestSize()];
  34.         sha384.DoFinal(hashBytes, 0);
  35.         return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
  36.     }
  37.     public static string ComputeSHA512(string input)
  38.     {
  39.         Sha512Digest sha512 = new Sha512Digest();
  40.         byte[] inputBytes = Encoding.UTF8.GetBytes(input);
  41.         sha512.BlockUpdate(inputBytes, 0, inputBytes.Length);
  42.         byte[] hashBytes = new byte[sha512.GetDigestSize()];
  43.         sha512.DoFinal(hashBytes, 0);
  44.         return BitConverter.ToString(hashBytes).Replace("-", "").ToLower();
  45.     }
  46. }
  47. // 示例用法
  48. string input = "Hello, BouncyCastle!";
  49. Console.WriteLine($"MD5: {HashExample.ComputeMD5(input)}");
  50. Console.WriteLine($"SHA1: {HashExample.ComputeSHA1(input)}");
  51. Console.WriteLine($"SHA256: {HashExample.ComputeSHA256(input)}");
  52. Console.WriteLine($"SHA384: {HashExample.ComputeSHA384(input)}");
  53. Console.WriteLine($"SHA512: {HashExample.ComputeSHA512(input)}");
复制代码
这些示例展示了在 .NET 下使用 BouncyCastle 实现 AES、RSA、MD5、SHA1、SHA256、SHA384、SHA512 加解密的基本操作。
具体的实现细节可能根据 BouncyCastle 版本略有变化,建议查阅 BouncyCastle 的官方文档以获取最新信息。


来源:https://www.cnblogs.com/hanbing81868164/archive/2023/12/10/17892182.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具