我在计算非常大的指数的能力时遇到了问题。即:我输入密码:"abc"
然后calculate x=Hash(password)
。在那之后,我必须calculate Y = pow(g,x)
,g
是random numbe
r。那我该如何计算Y.有什么建议吗?非常感谢你!
答案 0 :(得分:2)
在密码学c = m^e (mod n)
中,c
是密文,n
是您可以表示的最大值。需要模数运算。
除此之外,对于大数使用取幂Exponentiation by squaring。 pow
操作实现此算法。代码为here。
通过预定义的字节数组和字节操作,加密实现要复杂得多。您可以参考this paper's, Modular Exponentiation and Roots 部分。
答案 1 :(得分:1)
出于您的目的,您可能需要查看BigInteger.modPow()方法,它与Math.pow()方法相关。
http://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html
答案 2 :(得分:0)
问题是10 ^ 100是100位数。如果你的哈希,比方说4亿,结果值会消耗4Gb的内存。所以你的问题在现代硬件上几乎无法解决。
你确定Y是pow(g,x)而不是pow(g,x)mod SOME_VALUE?然后它会更有意义。