具有负数的BigInteger取幂

时间:2011-12-24 10:01:22

标签: java python algorithm security encryption

我怎样才能在这个python中使用(使用sage)代码:

def elGamalDecrypt(c1, c2, p, x):
    return Mod(c2*c1^(-x),p)

使用标准Java 7库?所有数字均为BigInteger

我尝试了很多但没有用。在Python中,它非常简单且快速。

2 个答案:

答案 0 :(得分:3)

Java 7中的BigInteger类有一个modPow方法,用于处理模幂运算。因此,类似下面的内容应该可行(尽管我还没有测试过):

c2.multiply(c1.modPow(x.negate(), p)).mod(p)

如果modPow-x是互质的,c1方法只接受否定指数p。 (名称p表示p是素数,如果c1p不是互质,c1可以被p整除因此取幂是没有意义的,所以我怀疑这不会成为问题。)

答案 1 :(得分:0)

这应该与c2 * c1^-x = c2 / (c1 ^ x)

相同
BigInteger elGamalDecrypt(BigInteger c1, BigInteger c2, BigInteger p, int x) {
    return c2.divide(c1.pow(x)).mod(p);
}