[英]java.math.BigInteger, pow method only accepts int
我正在執行DSA簽名驗證和確認分配,我需要執行如下計算: v = (((g)^u1(y)^u2) mod p) mod q
,其中g,u1,y ,u2,p和q都是BigInteger
對象,我陷入了g^u1
和y^u2
困境,我想使用pow方法進行計算,但是該方法僅接受int
參數,因此我無法像這樣計算g^u1
:
g.pow(u1);
可以接受的是,此方法僅接受int參數,因為在這種情況下, g
是1024位素數,並且u1
在這里等於666075361584433975742185154706661067887879287196
, g^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 ^ u1
和b = y ^ u2
,並且可以使用modPow有效地完成這些計算。 ((g)^u1(y)^u2) mod p
將是:
g.modPow(u1,p).multiply(y.modPow(u2,p)).mod(p)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.