我收到了一个(非常)简单的 DSA 问题,并且已经找到了 key 和其他变量。为了验证签名,我需要以某种方式翻译方程:
V = [(y^u1*h^u2)mod p] mod q
转换为 BigInteger 运算。这在java上可能吗?到目前为止,我一直在成功使用 modPow,但是到目前为止,所有问题都采用以下形式:
r.modPow(指数,模数);
我不知道如何通过 BigInteger 来完成上述方程(特别是粗体部分),我想知道它是否可能。有人有什么想法吗?
如果 BigInteger 做不到,我该如何通过 Pari 来表达这个方程?
最佳答案
我认为你只需要使用该身份
(a*b) mod p == ((a mod p)*(b mod p)) mod p
因此计算 yu1 × hu2 mod p:
- 使用
modPow
计算 yu1 mod p, - 使用
modPow
计算 hu2 mod p, - 将第 1 步和第 2 步的结果相乘,
- 减少第 3 步 mod p 的结果。
第 4 步是必要的,因为第 1 步和第 2 步的结果相乘可能会产生大于 p 的值。
关于java - DSA 签名验证和 BigInteger 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49716464/