我得到了一个(非常(简单的DSA问题,并且已经找到了密钥和其他变量。为了验证签名,我需要以某种方式翻译等式:
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:
- 计算 yu1 mod p,使用
modPow
, - 计算 hu2 mod p, 使用
modPow
, - 将步骤 1 和 2 的结果相乘,
- 减少步骤 3 mod p 的结果。
4 是必需的,因为步骤 1 和 2 的结果可能会相乘以产生大于 p 的值。