Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.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到BigInteger的幂(Schnorr签名)_Java_Cryptography_Biginteger_Largenumber - Fatal编程技术网

Java BigInteger到BigInteger的幂(Schnorr签名)

Java BigInteger到BigInteger的幂(Schnorr签名),java,cryptography,biginteger,largenumber,Java,Cryptography,Biginteger,Largenumber,我试图用Java实现Schnorr签名算法。我面临着用大指数(如MD5散列数)计算幂的问题 有什么方法可以用biginger的幂得到biginger吗 我需要计算(a^x*b^y)%z,其中y是一个非常大的数字。有没有计算这些表达式的方法 谢谢否。BigInteger支持的最大值是2Integer.MAX\u value-1。这个澄清的句子是在Java8中添加到的,但是它的实现在相当长的一段时间内都是相同的 BigInteger必须支持-2Integer.MAX_值(独占)到+2Integer.

我试图用Java实现Schnorr签名算法。我面临着用大指数(如MD5散列数)计算幂的问题

有什么方法可以用biginger的幂得到biginger吗

我需要计算(a^x*b^y)%z,其中y是一个非常大的数字。有没有计算这些表达式的方法


谢谢

否。BigInteger支持的最大值是2Integer.MAX\u value-1。这个澄清的句子是在Java8中添加到的,但是它的实现在相当长的一段时间内都是相同的

BigInteger必须支持-2Integer.MAX_值(独占)到+2Integer.MAX_值(独占)范围内的值,并且可以支持该范围以外的值

正如其他人指出的,您可能希望使用而不是计算中间值


作为比较,宇宙中估计有(或2265)个原子。

对于Schnorr签名算法,您实际上需要结合幂和模运算。仅仅依靠电力运行本身是毫无意义的,因为所涉及的数字可能非常庞大


您需要使用的
modPow
方法

我终于找到了解决办法。我可以使用以下技术快速计算表达式:

(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);

相关报道:这里有一个明显的问题。即使是像42这样小的数字,如果你把它提升到(2^127)次方,也会占用比地球上更多的内存。@cHao因为$z$相对较小,你只需要几百个字节。这显然不是链接问题的重复。Schnorr签名使用模运算,链接的问题在其标题中指出它与模运算无关。@CodesInChaos:第一次问模时,问题中没有提到模。我需要计算(a^x*b^y)%z,其中y是一个非常大的数字。有没有计算这些表达式的方法?+1用于解决您自己的问题和描述解决方案。老实说,我从来没有意识到这个问题是如此的基本——自从我第一次学习模运算以来已经太久了。