gpt4 book ai didi

java.math.BigInteger, pow方法只接受int

转载 作者:行者123 更新时间:2023-11-30 08:18:06 32 4
gpt4 key购买 nike

我正在执行 DSA 签名验证和验证分配,我需要执行这样的计算:v = (((g)^u1(y)^u2) mod p) mod q,其中 g、u1、y、u2、p 和 q 都是 BigInteger 对象,我遇到了 g^u1y^u2,我想使用 pow方法进行计算,但此方法仅接受 int 参数,因此我无法像这样计算 g^u1:

g.pow(u1);

这个方法只接受int参数是合理的,因为在这种情况下,g是一个1024位素数,u1在这里等于666075361584433975742185154706661067887879287196g^u1的结果会变得非常大。我的问题是,我应该如何计算 v = (((g)^u1(y)^u2) mod p) mod q

最佳答案

确实 g^u1 变得非常大。但是,您可以利用以下事实:

a * b  mod  n

可以计算为

(a mod n  *  b mod n)  mod  n

这里,a = g ^ u1b = y ^ u2,这些计算可以使用 modPow 高效地完成. ((g)^u1(y)^u2) mod p 将是:

g.modPow(u1,p).multiply(y.modPow(u2,p)).mod(p)

关于java.math.BigInteger, pow方法只接受int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27765069/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com