有没有办法在C#中生成大质数而不使用外部库?

时间:2011-12-10 11:13:50

标签: .net cryptography rsa primes biginteger

我需要为加密项目生成大质数。我注意到.NET 4.0有一些内置的加密原语(例如RSA),它使用随机生成的大质数(p,q用于RSA)。他们都使用一个公共的内置库,可以从他们的类范围外访问,或者我必须使用外部库(我知道有简单的primality测试算法,我只是不想实施的不仅仅是我。)。

2 个答案:

答案 0 :(得分:1)

在您需要的范围内生成一个大数字。测试它是否是素数。拒绝并重复,如果不是。

对于测试,只需使用试验分区,例如1500,然后切换到Miller-Rabin。有了正确实施的Miller-Rabin,硬件故障的可能性大于错误地将复合标记为素数。

答案 1 :(得分:1)

在.NET v4(及更高版本)中,Microsoft提供了一个新程序集System.Numerics.dll,其中包含BigInteger类型。但是它没有提供任何方法来检查质数。

Mono(自1.0之前)还提供[BigInteger][3]类型的Mono.Security.dll类型。您可以按原样使用 或将质数检查方法(存在多种方法)移植到新的Microsoft BigInteger类型。

  

他们都使用一个公共的内置库,可以从他们的类范围之外访问

是的,RSACryptoServiceProviderDSACryptoServiceProvider都会调用CryptoAPI来执行此操作。但是,CAPI不公开它自己的BigInteger代码(甚至是本机代码),所以它对你没用。