簡體   English   中英

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

[英]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^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)

無論如何,您都將要進行mod p那么為什么不使用BigInteger.modPow()

注意

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM