Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java BigInteger,pow方法只接受int_Java_Security_Biginteger - Fatal编程技术网

Java BigInteger,pow方法只接受int

Java BigInteger,pow方法只接受int,java,security,biginteger,Java,Security,Biginteger,我正在做一个DSA签名验证和验证任务,我需要执行如下计算:v=((g)^u1(y)^u2)mod p)mod q,其中g,u1,y,u2,p和q都是biginger对象,我被g^u1和y^u2卡住了,我想用这个方法来进行计算,但是这个方法只接受int参数,所以我不能像这样计算g^u1: g.pow(u1); 这个方法只接受int参数是合理的,因为在这种情况下,g是一个1024位的素数,u1这里等于6660753615843397574218515470666106767879287196,g^

我正在做一个DSA签名验证和验证任务,我需要执行如下计算:
v=((g)^u1(y)^u2)mod p)mod q
,其中g,u1,y,u2,p和q都是
biginger
对象,我被
g^u1
y^u2
卡住了,我想用这个方法来进行计算,但是这个方法只接受
int
参数,所以我不能像这样计算
g^u1

g.pow(u1);

这个方法只接受int参数是合理的,因为在这种情况下,
g
是一个1024位的素数,
u1
这里等于
6660753615843397574218515470666106767879287196
g^u1
的结果将变得非常大。我的问题是,我应该如何计算
v=((g)^u1(y)^u2)mod p)mod q
你无论如何都要做
mod p
,那么你为什么不使用

注意

g^u1 * y^u2 mod p == (g^u1 modp * y^u2 mod p) mod p

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

a * b  mod  n
可计算为

(a mod n  *  b mod n)  mod  n
在这里,
a=g^u1
b=y^u2
,这些计算可以使用<代码>((g)^u1(y)^u2)模块p将为:

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

不管怎样,您都要执行
mod p
,那么为什么不使用