2014-01-12 32 views
4

我正在进行加密,并且对于私钥指数d,您需要将d乘以e并将另一个数乘以mod,并将余数设为1.函数我已经是这样的:在java中更快地重新计算公式给我更快

private void genD() { 
     d = e/2; 
     // solve for d given d*e = 1 (mod eN) 
     while ((d * e) % eN != 1) { 
      d++; 
     } 
} 

什么,我现在显然是做事情,要通过每一个号码,直到有工作的野蛮方式。我知道这个方程完成了它的工作,使用发现的here的工作示例插入数字,但是对于我所生成的数字,它非常非常缓慢。从逻辑上讲,我觉得有一种方法可以更快地完成这项工作,但我无法想到如何?

任何帮助表示赞赏!感谢提前:)

回答

6

有快速乘法逆算法,它是不是非常困难,但也有一个内置到Java:

BigInteger.valueOf(e).modInverse(BigInteger.valueOf(eN)).intValue(); 

最流行的算法来计算国防部另一个号码是乘法逆http://en.wikipedia.org/wiki/Extended_Euclidean_algorithm#Modular_integers

+0

哇这是比预期更好的方式!非常感谢你,并感谢你的链接,以填补我的空闲时间:)考虑这个答案:)我会接受,当我可以 – PulsePanda