c# - DSA:生成 p
问题描述
我想为 DSA 算法生成 p。我找到了一个 160 位素数 q,现在我需要找到 p,其中 q 是 p-1 的除数。我确实在这里阅读了类似问题的答案,但我不确定如何实现该算法(DSA:如何生成次贷?),6. 步骤让我感到困惑。我确实使用了这段代码,但是当 p 是 2048 位长时它会变慢。
public BigInteger GenerateP(BigInteger q)
{
Random random = new Random();
BigInteger p = BigInteger.Zero;
do
{
BigInteger T = GenerateQ(108); //228
p = q * T;
Console.WriteLine(T.ToByteArray().Length);
Console.WriteLine(p.ToByteArray().Length);
} while (!p.IsEven);
p = p + BigInteger.One;
if (MillerRabinTest(10, p) != true)
{
p = GetNearestPrimeP(p, q);
}
return p;
}
public BigInteger GetNearestPrimeP(BigInteger p, BigInteger q)
{
while (MillerRabinTest(10, p) == false)
{
p += q * 2;
}
return p;
}
解决方案
推荐阅读
- python-3.x - Anaconda 破解 Python
- css - 如何在 sass 中扩展媒体查询
- node.js - angular 6 部署 node.js 静态路径
- katalon-studio - 在 verifyElementNotInViewport 上需要帮助:Katalon Studio
- matlab - 提取图像中特定线或线段的一般方法
- memory - 是否可以在 gem5 上运行 memtest86?
- sql - ManyToMany,KeyTable1 中与 KeyTable2 中选定项目匹配的最小键集?(我需要 w,x,y,z 类,最少有哪些老师可以满足)?
- ios - 使用 UIApplication.shared.keyWindow?.rootViewController 的问题
- bash - 如何编写一个bash文件来编译和执行一个c++程序
- sql - 查找两个时间范围之间的日期差距