2011-12-10 37 views
3

我需要为加密项目生成大素数。我注意到.NET 4.0有一些内置的密码原语(例如RSA),它使用随机生成的大素数(p,q代表RSA)。他们是否都使用一个公共的内置库,这个库是公开的,并且可以从他们的类范围之外访问,或者我必须使用外部库(我知道有简单的素数测试算法,我只是不想实施比我更多)。有没有办法在C#中生成大素数,而不使用外部库?

+1

素数必须是奇数。 – Corbin

+1

@Corbin - 不是*所有*素数都是奇数(但大数将是) –

+1

我想我很抱歉。但是,不是2是唯一的非奇素数? – Corbin

回答

1

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

单声道(自1.0之前)还提供[BigInteger][3]类型位于它的Mono.Security.dll大会。您可以使用,如或将质检方法(存在多种方法)移植到新的Microsoft BigInteger类型。

他们是否都使用常见的内置库,它是公共的,可以从它们的类范围

是的,无论是RSACryptoServiceProviderDSACryptoServiceProvider调用到CryptoAPI的做到这一点的外部访问。然而,CAPI不公开它自己的BigInteger代码(甚至是本地代码),所以它不会帮助你。

1

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

对于测试,只需使用1500以上的质数进行试验,然后切换到Miller-Rabin。通过正确实施Miller-Rabin,硬件故障的可能性大于错误地将复合材料标记为主要。

相关问题