1. 程式人生 > >RSA演算法加密

RSA演算法加密

摘錄至吳軍教授的數學之美第二版

以單詞Caesar加密和解密為例。首先,把它變成一組數,比如它的ASCII程式碼X=067097101115097114(每三位代表一個字母)做明碼。現在來設計一個密碼系統,對這個明碼加密。

1.找兩個很大的素數P Q,越大越好,比如100位長的,然後計算它們的乘積                                                     N=P×Q                                                M=(P-1)×(Q-1) 2.找一個和M互素的整數E,也就是說M和E除了1以外沒有公約數 3. 找一個整數D,使得E×D除以M 餘1,即   E×DmodM =1 現在,一個先進的且常用的密碼系統就設計好了,其中E是公鑰,誰都可以用來加密,公開金鑰就來源於此,D是私鑰用於解密,一定要自己儲存好。聯絡公鑰和金鑰的乘積N是公開的,即使敵人知道了也沒關係。 現在用下面的公式對X加密,得到密碼Y                                  X**E mod N = Y    (公式前面的為X的E次方) 如果知道私鑰D,只要按照下面的公式就可以從Y中得到X                                  Y**D mod N = X

公鑰,私鑰分別為(N,E),(N,D)   一定要保管好自己的私鑰。 

公開金鑰的好處有:

1.簡單,也就是一些乘除而已

2.可靠,公開金鑰方法保證產生的密文是統計獨立而分佈均勻的。也就是說,不論給出多少份明文和對應的密文,也無法根據已知的明文和密文的對應來破譯下一份密文,更重要的是N E可以公開給任何人加密用,但只有掌握金鑰D的人才可以解密,即使加密者自己也是無法解密的。這樣,即使加密者被抓住叛變了,整套密碼系統仍然是安全的。

3.靈活,可以產生很多的公開金鑰E和私鑰D的組合給不同的加密者。