2011-03-02 27 views
3

在RSA加密算法中,當cd是大數時,如何計算c^d mod nRSA計算c^d模

+1

你能更具體嗎? – NT3RP 2011-03-02 17:19:41

+0

有一個完整的[維基百科文章](http://en.wikipedia.org/wiki/RSA)致力於這個話題。 – 2011-03-02 17:22:00

+3

更好的維基百科文章:http://en.wikipedia.org/wiki/Modular_exponentiation – 2011-03-02 17:26:31

回答

3

GMP是C/C++軟件庫,這是否對你:mpz_powm,mpz_powm_ui的文件中。使用的方法(在很大程度上)在the wikipedia page中進行了解釋,您可以嘗試閱讀GMP的源代碼,如果您覺得這樣做...

0

「powMod」操作可以分解爲更小的步驟。

例如5^3 % 6等於((5 * 5) % 6) * 5 % 65^4 % 6等於(((5 * 5) % 6) * 5 % 6) * 5 % 6)。正如你所看到的,你可以在指數的子結果中應用模運算來始終使用較小的數值,因此即使在c和d爲高值時也可以更容易計算c^d % n

欲瞭解更多信息: http://en.wikipedia.org/wiki/Modular_exponentiation

+0

嘿,謝謝你的信息。假設我想計算60889^69301 mod 87984。有沒有更簡單的過程? – 2011-03-02 17:44:41

+0

@Santosh你想用手還是編程來計算? – HoLyVieR 2011-03-02 17:55:06

+0

我想這不可能手動。必須編寫一個程序。 – 2011-03-02 18:11:31

0

簡單的答案是:使用實現算法的語言和/關於「大整數」,幷包含適合模冪運算的功能。在Java中,這意味着使用java.lang.BigInteger,特別是方法modPow()。由於底層計算機不能真正處理「整數」,但是其中的有限仿真(例如「32位整數」,除了超過32位的高位被丟棄以外,其行爲與整數相似),所以必須應用這種「大整數」實現一些特定的算法,在Handbook of Applied Cryptography(第14章)中有詳細描述。