最近项目中使用到RSA加密算法,去网上看看有没有使用C#来实现RSA加解密,一搜几乎都没有完整可用的,搜索了很多资料都没有讲明白的,找到的一些文章讲的都是片段,目前有些RSA加解密算法会提供公钥加密和私钥解密,但C#只支持XML格式的加解密,因此需要将事先提供的公钥和私钥进行XML格式的转换才行!java的实现倒是一大堆,我就废话不多说了,直接上源码:
下面这个是加密类:
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Security;
using System.Security.Cryptography;
using System.Text;
namespace CcbPayWepApi
{
public static class RSACrytoTextProvider
{
public static string RsaPublicKeyToXml(string publicKey)
{
try
{
if (string.IsNullOrWhiteSpace(publicKey))
return "";
if (publicKey.Contains("<RSAKeyValue>"))
return publicKey;
RsaKeyParameters publicKeyParam;
//尝试进行java格式的密钥读取
try
{
publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(publicKey));
}
catch
{
publicKeyParam = null;
}
//非java格式密钥进行pem格式的密钥读取
if (publicKeyParam == null)
{
try
{
var pemKey = publicKey;
if (!pemKey.Contains("BEGIN RSA PRIVATE KEY"))
{
pemKey = @"-----BEGIN RSA PRIVATE KEY-----
" + publicKey + @"
-----END RSA PRIVATE KEY-----";
}
var array = Encoding.ASCII.GetBytes(pemKey);
var stream = new MemoryStream(array);
var reader = new StreamReader(stream);
var pemReader = new Org.BouncyCastle.OpenSsl.PemReader(reader);
publicKeyParam = (RsaKeyParameters)pemReader.ReadObject();
}
catch
{
publicKeyParam = null;
}