首页 > 解决方案 > 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;
    }

标签: c#digital-signaturedsa

解决方案


推荐阅读