Java中的RSA加密算法:没有BigIntegers

时间:2011-05-21 07:18:42

标签: java algorithm encryption rsa

我需要在Java中实现RSA算法。我找到了使用BigIntegers的最佳解决方案,问题是我只需要使用int或long。 加密是这样完成的:M[i]^e mod n其中M [i]是输入字符,e是键值。我尝试使用字符的ASCII码,并且使用115和116等代码,我很快就超出了范围。我该如何解决这个问题?提前谢谢。

2 个答案:

答案 0 :(得分:4)

您可以查看modular exponentiation。这样就可以克服计算中的大部分溢出。

答案 1 :(得分:1)

澄清一点......

(a * b) mod m == ((a mod m) * (b mod m)) mod m

如果你从基础数学回忆起来,

a ^ 10 = (a ^ 5) * (a ^ 5)

所以,你可以将疯狂的高权力分解为较低的权力,然后取其值的模数(从而保持较小的值),然后重新组合它们:

Too Big!         = Just Right!
(2 ^ 20) mod 113 = (((2 ^ 10) mod 113) * ((2 ^ 10) mod 113)) mod 113

我不知道这是否算是“放弃”,但是我的学生一次遇到麻烦,我没有问题向他们展示这个技巧。此外,我认为这更像是一种递归运动,而不是其他任何东西。