【问题标题】:Calculate power with very big exponents in java在java中用非常大的指数计算幂
【发布时间】:2014-04-21 07:16:39
【问题描述】:

我在计算非常大的指数的幂时遇到问题。那就是:我输入我的密码:"abc" 然后calculate x=Hash(password)。之后,我必须calculate Y = pow(g,x) 其中grandom number。那么我如何计算 Y。有什么建议吗?非常感谢!

【问题讨论】:

  • 你在问 Y 应该是什么数据类型? java.lang.math 中有一个 pow 方法。
  • 阅读arbitrary precision arithmetic
  • 其实并不是真正的“pow”。但我无法表达公式。你能在这个文档中看到:“用零知识实现零知识认证(ZKA_wzk)”;链接:ojs.pythonpapers.org/index.php/tppm/article/download/155/142 在第 9 页。我必须计算 Y。非常感谢!

标签: java pow exponent


【解决方案1】:

在密码学c = m^e (mod n) 中,c 是密文,n 是您可以表示的最大值。需要模运算。

除此之外,对于大数取幂,Exponentiation by squaring 被使用。 pow 操作实现了这个算法。代码是here

密码学实现要复杂得多,通过预定义的字节数组和字节操作。您可以参考this paper's模幂和根部分。

【讨论】:

【解决方案2】:

出于您的目的,您可能需要研究 BigInteger.modPow() 方法,它比 Math.pow() 方法更相关。

http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

【讨论】:

【解决方案3】:

问题是 10^100 是 100 位。如果你的哈希值,比如说 40 亿,结果值将消耗 4Gb 的内存。因此,您的问题在现代硬件上几乎无法解决。

您确定 Y 是 pow(g,x) 而不是 pow(g,x) mod SOME_VALUE?那么它会更有意义。

【讨论】:

猜你喜欢
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多