簡體   English   中英

RSACryptoServiceProvider使用公鑰解密失敗

[英]RSACryptoServiceProvider Decrypt failing using public key

我想當服務器通過使用私鑰加密發送數據時,我應該能夠使用公鑰解密。 但這引發了錯誤。

    var message = "test";

    byte[] encryped;
    byte[] decryped;

    {
        string path = ".\\1.pfx";
        string password = "1";
        X509Certificate2 certificate = new X509Certificate2(path, password);
        RSACryptoServiceProvider provider = 
                certificate.PrivateKey as RSACryptoServiceProvider;

        encryped = RSAEncrypt(provider, Encoding.Unicode.GetBytes(message));
    }

    {
        string path = ".\\1.cer";
        X509Certificate2 certificate = new X509Certificate2(path);
        RSACryptoServiceProvider provider = 
                certificate.PublicKey.Key as RSACryptoServiceProvider;

        decryped = RSADecrypt(provider, encryped);
    }

    Assert.IsTrue(message == Encoding.Unicode.GetString(decryped));

方法本身很簡單。

    public static byte[] RSAEncrypt(RSACryptoServiceProvider rsa, byte[] plaintext)
    {
        byte[] encryptedData;
        encryptedData = rsa.Encrypt(plaintext, true);
        return encryptedData;
    }



    public static byte[] RSADecrypt(RSACryptoServiceProvider rsa, byte[] ciphertext)
    {
        byte[] decryptedData;
        decryptedData = rsa.Decrypt(ciphertext, true);
        return decryptedData;
    }

這將引發以下錯誤。

System.Security.Cryptography.CryptographicException:'解碼OAEP填充時發生錯誤。

.NET不公開“原始”(或“未填充”)RSA操作。

在使用RSA進行簽名的操作中,簽名者采用哈希算法和哈希值,在其周圍構建填充的結構化消息,並使用私鑰進行RSA操作。

在驗證操作中,驗證者使用公鑰執行RSA操作,檢查填充結構是否完整,並(直接或間接)檢查哈希算法和哈希值是否與預期結果匹配。

在加密操作中,將消息放入加密填充結構中,並使用收件人的公共密鑰執行RSA操作。

在解密操作中,消息使用接收者的私鑰通過RSA操作,驗證填充結構,然后返回封裝的消息。

|-----------|--------------|-----------------|
| Operation | Pub/Priv Key | Add/Rem Padding |
|-----------|--------------|-----------------|
| Sign      | Private      | Add PKCS#1/PSS  |
| Encrypt   | Public       | Add PKCS#1/OAEP |
| Decrypt   | Private      | Remove (Encrypt)|
| Verify    | Public       | Remove (Sign)   |
|-----------|--------------|-----------------|

由於您具有簽名,因此需要一個將公鑰與RSA操作結合使用並刪除填充(而不是添加填充)的操作。 這意味着只有VerifyDataVerifyHash可以執行您想要的操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM