使用快速指数进行加密/解密的负取幂

时间:2010-12-07 22:43:04

标签: java encryption

所有

我编写了快速取幂算法来检查加密值是否等于给定指数(e)和模数base(n)的原始值。当我有一个负指数时,值不一样。这是我的工作:

1>任何值base
2>私钥prKey
3>公钥puKey
4>模数基数modN

使用base ^ prKey mod modN解密以获取decryptVal
然后加密decryptVal ^ puKey mod modN以获取encryptVal

现在encryptVal应该等于base。在我的代码中,只有私钥prKey 的正值才满足此条件。对于prKey的负值,永远不会满足条件。

示例(来自我的代码运行各种随机值):

1> base:4092
2> modN = 6499
3> puKey = 5
4> prKey = -1267

会给decryptVal = 4092而encryptVal = 5537!= base

而在何时,

1> base:249
2> modN = 6059
3> puKey = 5
4> prKey = 1181

给我decryptVal = 4067和encryptVal = 249 = base

此条件是否是预期的行为,或者基于上述执行结果我的代码中存在缺陷? [注意]:使用扩展欧几里德算法计算prKeypuKey

1 个答案:

答案 0 :(得分:2)

我两次阅读你的帖子,不太明白问题是什么。您询问代码中是否存在缺陷但未显示任何代码。无论如何,对于负x,通常对取幂a x mod n的定义要求gcd(a,n)= 1.如果gcd(a,n) = 1那么a x mod n ==(a -1 -x mod n。因此,如果x为负数,则首先计算a的倒数,然后将其提高到-x幂,全部为mod n