【发布时间】:2015-03-07 08:25:31
【问题描述】:
我正在研究密码学实现,部分设计包括以下内容:
( (y^a)^b / (y^c)^b ) 模 p
我有以下sn-p:
BigInteger yab = y.pow(ab.intValue());
BigInteger ycb = y.pow(cb.intValue());
BigInteger ans = (yab.divide(ycb)).mod(p);
它适用于小整数。一旦我用生成的键替换它,指数变得如此巨大,我将遇到“BigInteger out of int range”错误。 modPow函数我试过了,结果不一样。
我知道将其转换为 int 有其局限性。这是否意味着我的实现不可行?
【问题讨论】:
-
看看你的另一个问题,你真的应该读一读什么是模逆......
-
嗨@Mysticial,我的实现的某些部分确实使用了modInverse。但我不确定它如何适用于这种情况。你能提供建议吗?
-
@kenAu89 你肯定选错了答案:虽然 peter-lawrey 给了你想要的东西,但这并不是你真正需要计算的东西,因为没有理智的密码学家会设计一个允许任何形式的减少的公式,尤其是即使是小学生也可以锻炼的公式。您应该听从上面mysticial的建议,并接受下面artjom-b的解决方案。
-
@AntonSamsonov 你好,先生。感谢您的意见。现在关于在我的实现中使用模逆的一切似乎都更清楚了。
标签: java cryptography biginteger pow exponent