簡體   English   中英

BigInteger強大的BigInteger(Schnorr簽名)

[英]BigIntegers to the power of BigInteger (Schnorr signature)

我正在嘗試用Java實現Schnorr簽名算法。 我面臨着用大指數計算功率的問題(例如MD5哈希數)。

有沒有辦法讓BigInteger掌握BigInteger的力量?

我需要計算(a ^ x * b ^ y)%z,其中y是非常大的數。 有沒有計算這種表達的方法?

謝謝

對於Schnorr簽名算法,您實際上需要組合功率和模數運算。 僅僅進行一次動力操作是沒有意義的,因為所涉及的數字可能是巨大的。

您需要使用BigIntegermodPow方法。

我終於找到了解決方案。 使用這種技術,我可以非常快速地計算出我的表情:

(a * b) % p = ((a % p) * (b % p)) % p

因此,我的示例如下所示:

(a^x * b^y) % z = ( ((a^x) % z) * ((b^y) % z) ) % z;

或者,在Java中使用BigInteger:

BigInteger result = a.modPow(x, z).multiply( b.modPow(y, z) ).mod(z);

否。BigInteger支持的最大值為2 Integer.MAX_VALUE -1。 這個澄清的句子已添加到Java 8中的BigInteger Javadoc中,但是實現了相當一段時間了。

BigInteger必須支持-2 Integer.MAX_VALUE (不包括)到+2 Integer.MAX_VALUE (不包括)之間的值,並且可以支持該范圍之外的值。

正如其他人指出的那樣,您可能要使用modPow而不是計算中間值。

作為比較,宇宙中估計有10 80 (或2 265 )個原子。

暫無
暫無

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

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