C# Internal.Cryptography.CryptoThrowHelper.WindowsCryptography在C中解密RSA时出现异常#

C# Internal.Cryptography.CryptoThrowHelper.WindowsCryptography在C中解密RSA时出现异常#,c#,rsa,.net-core,C#,Rsa,.net Core,我正在C#dotnet核心中测试RSA。我创建了两个RSA对象,一个用于加密,另一个用于解密。我从第一个rsa对象导出公钥,然后为另一个对象导入公钥。当第二个解密密码数组时,它抛出Internal.Cryptography.CryptoThrowHelper.WindowsCryptographException。 代码如下: String plainstr = "Hello World"; RSA rsa1 = RSA.Create(); RS

我正在C#dotnet核心中测试RSA。我创建了两个RSA对象,一个用于加密,另一个用于解密。我从第一个rsa对象导出公钥,然后为另一个对象导入公钥。当第二个解密密码数组时,它抛出
Internal.Cryptography.CryptoThrowHelper.WindowsCryptographException
。 代码如下:

        String plainstr = "Hello World";

        RSA rsa1 = RSA.Create();
        RSA rsa2 = RSA.Create();
        rsa1.KeySize = 1024;
        rsa2.KeySize = 1024;

        byte[] cipherbytes = rsa1.Encrypt(Encoding.ASCII.GetBytes(plainstr), RSAEncryptionPadding.Pkcs1);
        //If the parameter is true, it works well. But when I use it in an actual project, I won't pass the private key.
        RSAParameters parameters = rsa1.ExportParameters(false);
        rsa2.ImportParameters(parameters);
        //Exception is here.
        byte[] plaintbytes = rsa2.Decrypt(cipherbytes, RSAEncryptionPadding.Pkcs1);
        Console.WriteLine(Encoding.ASCII.GetString(plaintbytes));
        Console.ReadKey();

这就是RSA加密的工作原理。您可以使用公钥
加密
,但只能使用私钥解密

在您的示例中,您使用
rsa1
对象的私钥对字符串进行加密,将其公共参数复制到
rsa2
并尝试使用它进行解密


也许你想做相反的事情?

这就是RSA加密的工作原理。您可以使用公钥
加密
,但只能使用私钥解密

在您的示例中,您使用
rsa1
对象的私钥对字符串进行加密,将其公共参数复制到
rsa2
并尝试使用它进行解密


也许你想做相反的事?

哦,天哪!我知道。但是我只是在编码的时候弄糊涂了,哈哈。谢谢大家!@伯阳很高兴你找到了它!你能把它标记为答案吗?是的,但是怎么做呢。我是新来的,找不到这样的人button@boyang按下“投票否决”按钮,你可以点击一张绿色支票。哦,我的上帝!我知道。但是我只是在编码的时候弄糊涂了,哈哈。谢谢大家!@伯阳很高兴你找到了它!你能把它标记为答案吗?是的,但是怎么做呢。我是新来的,找不到button@boyang按下向下投票按钮,您可以单击绿色复选框。