2011-01-31 204 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位对于非对称和对称加密是相同的,但不是,它们不是。