在c#中使用RSACryptoServiceProvider查找公钥和私钥

时间:2013-05-23 10:42:43

标签: c# rsa

我有以下代码。

RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//Save the public key information to an RSAParameters structure.
RSAParameters RSAKeyInfo = RSA.ExportParameters(true);

byte[] toEncryptData = Encoding.ASCII.GetBytes("hello world");
byte[] encryptedRSA = RSAEncrypt(toEncryptData, RSAKeyInfo, false);
string EncryptedResult = System.Text.Encoding.Default.GetString(encryptedRSA);

byte[] decryptedRSA = RSADecrypt(encryptedRSA, RSAKeyInfo, false);
string originalResult = System.Text.Encoding.Default.GetString(decryptedRSA);
return userDetails.ToString();

当我使用RSAEncrypt方法时,它采用参数“RSAKeyInfo”(加密的公钥和解密的私钥)。

如何获取私钥和​​公钥的值,此方法用于加密和解密。

谢谢,

1 个答案:

答案 0 :(得分:8)

您需要使用RSA.ToXmlString

下面的代码使用两个不同的RSA实例,其中包含包含公钥和私钥的共享字符串。要仅获取公钥,请使用false参数,true参数将返回公钥+私钥。

class Program
{
    public static void Main(string[] args)
    {
        //Encrypt and export public and private keys
        var rsa1 = new RSACryptoServiceProvider();
        string publicPrivateXml = rsa1.ToXmlString(true);   // <<<<<<< HERE
        byte[] toEncryptData = Encoding.ASCII.GetBytes("hello world");
        byte[] encryptedRSA = rsa1.Encrypt(toEncryptData, false);
        string EncryptedResult = Encoding.Default.GetString(encryptedRSA);

        //Decrypt using exported keys
        var rsa2 = new RSACryptoServiceProvider();
        rsa2.FromXmlString(publicPrivateXml);    
        byte[] decryptedRSA = rsa2.Decrypt(encryptedRSA, false);
        string originalResult = Encoding.Default.GetString(decryptedRSA);

    }
}