1. 将privatekey.pem 变为XML 字符串
public string RSAPrivateKeyXML() {
RsaPrivateCrtKeyParameters privateKeyParam = (RsaPrivateCrtKeyParameters)PrivateKeyFactory.CreateKey(Convert.FromBase64String(@"
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBALf9/Xe/P260jhOO
ebhxMcJn6EIfq4455zi+NgghqXOBVvMjOoLA9kl9BFLC3wO2Pex7E8FFm1V1CpTk
BhY7t9J7qAZ22BvFdWQb+tQ3Wu38evahf20Z3FDPggrqi5S+lYO3jaqXvivQ3heM
kGcAYrNcSxD6CHJ7R64P5FCxqVMjAgMBAAECgYEAhHBZMQcC2+cvlbgqua8RCETP
FDnDvV7Epz2TmwrP9IqXUfB7v36ySXep0wDeksdtj3mQYMB/7WWQNlhkYUCfMbLS
KU77qk8f4MOgK0v1s4U+WtCf4ru0zFW6mXbklOFql04gCAOWEoyOr5++bFdmqkSb
KXem7Dr/NoQ9DferxvECQQDy07eeRbIBEWmmB5fKQqLQOijBuKyyMdzzJdtSfgex
odfv3ZDJrLR1eEHLOmiuCV6akLPXgMW4RZleQgyM6deNAkEAwfkyt/DzTvdYz/am
XafovOiN+YGNtfRHBbpzz4C9Xr8HJracsxB9Gx32aS8dsGY81DFZgWMLjlxy/dPK
D2aRbwJAeJbPnxf5eDJPhxZKOTWyaToYt2ugx7WfhliMfID+DSbUd9hOaPkNfTDF
a8mL5rHce2HVDfZzOjnGGlsupGQUmQJAFtux8WEwmu6lBaTQSBsgXxqcmHl+5KFL
uU4Wla5bIo4qXpKIdsWLqKVoQ07tFbuGkY7bOFcepoEYf/b0ScpRewJBANXblpaj
xNtFy6jYSTpeklribCngbRvoPCcdLTIuTVr5EfiYdl4y81TO+bOFG7TBLMCnNNKW
H85vMckSKgbs1vk="));
return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent><P>{2}</P><Q>{3}</Q><DP>{4}</DP><DQ>{5}</DQ><InverseQ>{6}</InverseQ><D>{7}</D></RSAKeyValue>",
Convert.ToBase64String(privateKeyParam.Modulus.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.PublicExponent.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.P.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.Q.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.DP.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.DQ.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.QInv.ToByteArrayUnsigned()),
Convert.ToBase64String(privateKeyParam.Exponent.ToByteArrayUnsigned()));
}
2.将publickey.crt 变为XML字符串
public string RSAPublicKeyXML()
{
RsaKeyParameters publicKeyParam = (RsaKeyParameters)PublicKeyFactory.CreateKey(Convert.FromBase64String(@"
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC3/f13vz9utI4Tjnm4cTHCZ+hC
H6uOOec4vjYIIalzgVbzIzqCwPZJfQRSwt8Dtj3sexPBRZtVdQqU5AYWO7fSe6gG
dtgbxXVkG/rUN1rt/Hr2oX9tGdxQz4IK6ouUvpWDt42ql74r0N4XjJBnAGKzXEsQ
+ghye0euD+RQsalTIwIDAQAB"));
return string.Format("<RSAKeyValue><Modulus>{0}</Modulus><Exponent>{1}</Exponent></RSAKeyValue>",
Convert.ToBase64String(publicKeyParam.Modulus.ToByteArrayUnsigned()),
Convert.ToBase64String(publicKeyParam.Exponent.ToByteArrayUnsigned()));
}
3. 将字符串加密
public string RsaEncrypt(string value, bool usePkcs8 = false)
{
if (string.IsNullOrEmpty(value)) return value;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
string publicKey = this.RSAPublicKeyXML();
rsa.FromXmlString(publicKey);//将公钥导入到RSA对象中,准备加密;
var buffer = Encoding.UTF8.GetBytes(value);
buffer = rsa.Encrypt(buffer, false);
return Convert.ToBase64String(buffer);
}
4.解密字符串
public string RsaDecrypt(string value, bool usePkcs8 = false)
{
if (string.IsNullOrEmpty(value)) return value;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
string privateKey = this.RSAPrivateKeyXML();
rsa.FromXmlString(privateKey);//将私钥导入RSA中,准备解密;
var buffer = rsa.Decrypt(Convert.FromBase64String(value), false);
return Encoding.UTF8.GetString(buffer);
}