.NET中使用BouncyCastle动态库实现RSA方式加密方法

最近要用.NET的技术和C++写的后台联写一个RSA加密解密程序。

具体是.NET里面实现加密,C++里面解密, 要求将字符串加密成64个字节,并且每个字节转成16进制,一共128位的16进制的字符串

.NET中实现RSA加密我使用了java中使用的一个动态库BouncyCastle.Crypto.dll,可以到网站http://www.bouncycastle.org/csharp/ 上下载此动态库,

将dll添加到.net项目引用中。

使用下面这些命名空间:


using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.Nist;
using Org.BouncyCastle.Asn1.Oiw;
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Asn1.TeleTrust;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Utilities;
using Org.BouncyCastle.Utilities.Encoders;

 

公钥文件存放在 C:\Users\dell\Desktop\pub.txt 文本中

加密方法:

public string RSAEncrypt(string source)  // source为要加密的字符串
        {
            PemReader r = new PemReader(new StreamReader(@"C:\Users\dell\Desktop\pub.txt"));     //载入公钥
            Object readObject = r.ReadObject();
            AsymmetricKeyParameter pubKey = (AsymmetricKeyParameter)readObject;
            IBufferedCipher c = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");      // 参数与C++中解密的参数一致
            c.Init(true, pubKey);
            byte[] DataToEncrypt = Encoding.Default.GetBytes(source);
            byte[] outBytes = c.DoFinal(DataToEncrypt);
            string hex = bytesToHexString(outBytes);
            return hex;
        }

 public  String bytesToHexString(byte[] src)    //方法将byte数组转成16进制的字符串
        {
            StringBuilder stringBuilder = new StringBuilder();
            if (src == null || src.Length <= 0)
            {
                return null;
            }
            for (int i = 0; i < src.Length; i++)
            {
                stringBuilder.Append(src[i].ToString("X2"));
            }
            return stringBuilder.ToString();
        }

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
BouncyCastle 是一个流行的开源加密库,提供了多种加密算法和安全协议的实现.NET Core 也可以使用 BouncyCastle 库来实现加密解密的功能。 在 .NET Core 使用 BouncyCastle 库,需要先安装 BouncyCastle NuGet 包。可以通过 Visual Studio 的 NuGet 包管理器搜索并安装,也可以通过命令行使用 dotnet 命令进行安装: ``` dotnet add package BouncyCastle ``` 安装完成后,就可以在代码使用 BouncyCastle 库提供的加密解密方法了。以下是一个使用 BouncyCastle 库进行 AES 加密解密的示例代码: ```csharp using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Engines; using Org.BouncyCastle.Crypto.Modes; using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Security; public class AesCipher { private readonly byte[] _key; private readonly byte[] _iv; public AesCipher(byte[] key, byte[] iv) { _key = key; _iv = iv; } public byte[] Encrypt(byte[] data) { IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CBC/PKCS7Padding"); cipher.Init(true, new ParametersWithIV(new KeyParameter(_key), _iv)); return cipher.DoFinal(data); } public byte[] Decrypt(byte[] data) { IBufferedCipher cipher = CipherUtilities.GetCipher("AES/CBC/PKCS7Padding"); cipher.Init(false, new ParametersWithIV(new KeyParameter(_key), _iv)); return cipher.DoFinal(data); } } ``` 在上面的示例代码,我们使用BouncyCastle 库提供的 `IBufferedCipher` 接口来进行加密解密。`CipherUtilities.GetCipher` 方法可以根据指定的算法名称获取对应的 `IBufferedCipher` 实例。在初始化 `IBufferedCipher` 实例时,我们需要传入加密/解密的模式、密钥和初始化向量等参数。在加密/解密时,我们调用 `DoFinal` 方法来执行加密/解密操作,并返回加密/解密后的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值