簡體   English   中英

C#RSACryptoServiceProvider Encrypt()方法如何工作?

[英]How does the C# RSACryptoServiceProvider Encrypt() method work?

我很好奇,因為RSA不是分組密碼,但Encrypt()方法可以采用任意數量的數據進行加密。

它是否使用AES + RSA混合加密? 或者它只是使用RSA(錯誤地)作為分組密碼?

但Encrypt()方法可以采用任意數量的數據進行加密

根據MSDN它不能

rgb參數的最大長度
模數大小-2 -2 * hLen,其中hLen是散列的大小。

它甚至有一個CryptographicException ,顯示“rgb參數的長度大於允許的最大長度。”。

它是否使用AES + RSA混合加密?

,不。 如果這是你正在尋找的,那么你必須自己做或者查看關於這個主題的舊博客條目。

或者它只是使用RSA(錯誤地)作為分組密碼?

,不。 它將填充(PKCS#1 1.5或OAEP)應用於提供的byte[]並加密它。 因此確實有長度限制(正如其他人已經指出的那樣)。

這是它的樣子(來自Mono的BCL源代碼)。

public byte[] Encrypt (byte[] rgb, bool fOAEP) 
{
    // choose between OAEP or PKCS#1 v.1.5 padding
    AsymmetricKeyExchangeFormatter fmt = null;
    if (fOAEP)
        fmt = new RSAOAEPKeyExchangeFormatter (rsa);
    else
        fmt = new RSAPKCS1KeyExchangeFormatter (rsa);

    return fmt.CreateKeyExchange (rgb);
}

暫無
暫無

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

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