2011-01-31 217 views
1

我可以在.NET中加載一個128位RSA密鑰,並將其用於解密。但我似乎無法生成128位(或更低)的密鑰,我總是得到錯誤'指定的無效標誌'。當我嘗試512位密鑰大小時,一切正常。那麼對於.NET來說,512位的最小密鑰大小是多少?.NET RSA加密:最小密鑰大小?

+1

您可以更具體地瞭解您正在使用的API嗎? – 2011-01-31 15:35:39

+0

你爲什麼在意?低於512位的RSA密鑰被完全破壞。 – CodesInChaos 2012-04-18 14:51:18

回答

3

每個AsymmetricAlgorithmSymmetricAlgorithm都有一個屬性LegalKeySizes,可以幫助您確定密鑰大小是否對算法有效。從鏈接,您可以打印出的有效密鑰大小的算法使用的是:

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); 
for (int i = 0; i < rsa.LegalKeySizes.Length; i++) 
{ 
    KeySizes key_size = rsa.LegalKeySizes[i]; 
    Console.WriteLine(String.Format("[Key Size {0}] - min: {1}, max: {2}, step: {2}", 
     i, key_size.MinSize, key_size.MaxSize, key_size.SkipSize)); 
} 

對於RSACryptoServiceProvider,這將打印:

[密鑰大小0] - 最小:384,最大: 16384,步驟:16384

5

512位(技術上)是RSA密鑰的最小大小,但它不安全。現在1024位是絕對最小值,推薦2048位。

注意,RSA中的1024位在安全級別上對應於128位對稱算法。也許你混淆了這些值,認爲128位對於非對稱和對稱加密是相同的,但不是,它們不是。