2011-06-22 41 views
3

我很好奇,因爲RSA不是分組密碼,但Encrypt()方法可以接受任意數量的數據進行加密。C#RSACryptoServiceProvider Encrypt()方法是如何工作的?

它使用AES + RSA混合加密嗎?還是僅僅使用RSA(錯誤地)作爲分組密碼?

+1

它在哪裏說加密方法可以採取任意數量的數據?當然不在文檔中。 –

回答

3

尚未加密()方法可以採取任意數據量來加密

根據MSDN它不能

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

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

+1

當檢查「(rsa.KeySize/8) - (sha1computedHashSize * 2 + 2)」時,我得到1024/8 - (20 * 2 + 2),即86(即OAEP填充)。 – user276648

1

它使用AES + RSA混合加密嗎?

它沒有。如果這是你正在尋找的,那麼你必須自己做,或檢查我的舊的blog條目的主題。

還是僅僅使用RSA(錯誤地)作爲分組密碼?

它沒有。它將向提供的byte[]應用填充(PKCS#11.5或OAEP)並對其進行加密。因爲確實有長度限制(正如其他人已經指出)。

下面是它的外觀(來自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); 
} 
相關問題