我需要在Java中实现RSA算法。我找到了使用BigIntegers的最佳解决方案,问题是我只需要使用int或long。
加密是这样完成的:M[i]^e mod n
其中M [i]是输入字符,e是键值。我尝试使用字符的ASCII码,并且使用115和116等代码,我很快就超出了范围。我该如何解决这个问题?提前谢谢。
答案 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
我不知道这是否算是“放弃”,但是我的学生一次遇到麻烦,我没有问题向他们展示这个技巧。此外,我认为这更像是一种递归运动,而不是其他任何东西。