2014-01-12 31 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