所有
我编写了快速取幂算法来检查加密值是否等于给定指数(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
此条件是否是预期的行为,或者基于上述执行结果我的代码中存在缺陷?
[注意]:使用扩展欧几里德算法计算prKey
和puKey
答案 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
。