我很好奇,因爲RSA不是分組密碼,但Encrypt()方法可以接受任意數量的數據進行加密。C#RSACryptoServiceProvider Encrypt()方法是如何工作的?
它使用AES + RSA混合加密嗎?還是僅僅使用RSA(錯誤地)作爲分組密碼?
我很好奇,因爲RSA不是分組密碼,但Encrypt()方法可以接受任意數量的數據進行加密。C#RSACryptoServiceProvider Encrypt()方法是如何工作的?
它使用AES + RSA混合加密嗎?還是僅僅使用RSA(錯誤地)作爲分組密碼?
尚未加密()方法可以採取任意數據量來加密
根據MSDN它不能
RGB參數
模量大小的最大長度 - 2 -2 * hLen,其中hLen是散列的大小。
它甚至有一個CryptographicException
,它顯示「rgb參數的長度大於最大允許長度」。
當檢查「(rsa.KeySize/8) - (sha1computedHashSize * 2 + 2)」時,我得到1024/8 - (20 * 2 + 2),即86(即OAEP填充)。 – user276648
它使用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);
}
它在哪裏說加密方法可以採取任意數量的數據?當然不在文檔中。 –