最近要用.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();
}