我需要为加密项目生成大质数。我注意到.NET 4.0有一些内置的加密原语(例如RSA),它使用随机生成的大质数(p,q用于RSA)。他们都使用一个公共的内置库,可以从他们的类范围外访问,或者我必须使用外部库(我知道有简单的primality测试算法,我只是不想实施的不仅仅是我。)。
答案 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
类型。
他们都使用一个公共的内置库,可以从他们的类范围之外访问
是的,RSACryptoServiceProvider
和DSACryptoServiceProvider
都会调用CryptoAPI来执行此操作。但是,CAPI不公开它自己的BigInteger代码(甚至是本机代码),所以它对你没用。