RSA加密算法原理

必備數學知識

RSA加密算法中,只用到素數、互質數、指數運算、模運算等幾個簡單的數學知識。所以,我們也需要了解這幾個概念即可。

素數

素數又稱質數,指在一個大于1的自然數中,除了1和此整數自身外,不能被其他自然數整除的數。這個概念,我們在上初中,甚至小學的時候都學過了,這里就不再過多解釋了。

互質數

百度百科上的解釋是:公因數只有1的兩個數,叫做互質數。;維基百科上的解釋是:互質,又稱互素。若N個整數的最大公因子是1,則稱這N個整數互質。

常見的互質數判斷方法主要有以下幾種:

兩個不同的質數一定是互質數。例如,2與7、13與19。

一個質數,另一個不為它的倍數,這兩個數為互質數。例如,3與10、5與 26。

相鄰的兩個自然數是互質數。如 15與 16。

相鄰的兩個奇數是互質數。如 49與 51。

較大數是質數的兩個數是互質數。如97與88。

小數是質數,大數不是小數的倍數的兩個數是互質數。例如 7和 16。

2和任何奇數是互質數。例如2和87。

1不是質數也不是合數,它和任何一個自然數在一起都是互質數。如1和9908。

輾轉相除法。

指數運算

指數運算又稱乘方計算,計算結果稱為冪。nm指將n自乘m次。把nm看作乘方的結果,叫做”n的m次冪”或”n的m次方”。其中,n稱為“底數”,m稱為“指數”。

模運算

模運算即求余運算。“模”是“Mod”的音譯。和模運算緊密相關的一個概念是“同余”。數學上,當兩個整數除以同一個整數,若得相同余數,則二整數同余

兩個整數a,b,若它們除以正整數m所得的余數相等,則稱a,b對于模m同余,記作:?a ≡ b (mod m);讀作:a同余于bm,或者,ab關于模m同余。例如:26 ≡ 14 (mod 12)。

RSA加密算法

RSA加密算法簡史

RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。

公鑰與密鑰的產生

假設Alice想要通過一個不可靠的媒體接收Bob的一條私人訊息。她可以用以下的方式來產生一個公鑰和一個私鑰

隨意選擇兩個大的質數pqp不等于q,計算N=pq

根據歐拉函數,求得r = (p-1)(q-1)

選擇一個小于 r 的整數e,求得 e 關于模 r 的模反元素,命名為d。(模反元素存在,當且僅當e與r互質)

pq的記錄銷毀。

(N,e)是公鑰,(N,d)是私鑰。Alice將她的公鑰(N,e)傳給Bob,而將她的私鑰(N,d)藏起來。

加密消息

假設Bob想給Alice送一個消息m,他知道Alice產生的Ne。他使用起先與Alice約好的格式將m轉換為一個小于N的整數n,比如他可以將每一個字轉換為這個字的Unicode碼,然后將這些數字連在一起組成一個數字。假如他的信息非常長的話,他可以將這個信息分為幾段,然后將每一段轉換為n。用下面這個公式他可以將n加密為c

ne≡ c (mod N)

計算c并不復雜。Bob算出c后就可以將它傳遞給Alice。

解密消息

Alice得到Bob的消息c后就可以利用她的密鑰d來解碼。她可以用以下這個公式來將c轉換為n

cd≡ n (mod N)

得到n后,她可以將原來的信息m重新復原。

解碼的原理是:

cd≡ ne·d(mod N)

以及ed≡ 1 (modp-1)和ed≡ 1 (modq-1)。由費馬小定理可證明(因為pq是質數)

ne·d≡ n (mod p)?  和? ne·d≡ n (mod q)

這說明(因為pq不同的質數,所以pq互質)

ne·d≡ n (mod pq)

簽名消息

RSA也可以用來為一個消息署名。假如甲想給乙傳遞一個署名的消息的話,那么她可以為她的消息計算一個散列值(Message digest),然后用她的密鑰(private key)加密這個散列值并將這個“署名”加在消息的后面。這個消息只有用她的公鑰才能被解密。乙獲得這個消息后可以用甲的公鑰解密這個散列值,然后將這個數據與他自己為這個消息計算的散列值相比較。假如兩者相符的話,那么他就可以知道發信人持有甲的密鑰,以及這個消息在傳播路徑上沒有被篡改過。

編程實踐

下面,開始我們的重點環節:編程實踐。在開始編程前,我們通過計算,來確定公鑰和密鑰。

計算公鑰和密鑰

假設p = 3、q = 11(p,q都是素數即可。),則N = pq = 33;

r = (p-1)(q-1) = (3-1)(11-1) = 20;

根據模反元素的計算公式,我們可以得出,e·d ≡ 1 (mod 20),即e·d = 20n+1 (n為正整數);我們假設n=1,則e·d = 21。e、d為正整數,并且e與r互質,則e = 3,d = 7。(兩個數交換一下也可以。)

到這里,公鑰和密鑰已經確定。公鑰為(N, e) = (33, 3),密鑰為(N, d) = (33, 7)。

編程實現

下面我們使用Java來實現一下加密和解密的過程。具體代碼如下:

RSA算法實現:




package security.rsa;

public class RSA {

/**

*? 加密、解密算法

* @param key 公鑰或密鑰

* @param message 數據

* @return

*/

public static long rsa(int baseNum, int key, long message){

if(baseNum < 1 || key < 1){

return 0L;

}

//加密或者解密之后的數據

long rsaMessage = 0L;

//加密核心算法

rsaMessage = Math.round(Math.pow(message, key)) % baseNum;

return rsaMessage;

}

public static void main(String[] args){

//基數

int baseNum = 3 * 11;

//公鑰

int keyE = 3;

//密鑰

int keyD = 7;

//未加密的數據

long msg = 24L;

//加密后的數據

long encodeMsg = rsa(baseNum, keyE, msg);

//解密后的數據

long decodeMsg = rsa(baseNum, keyD, encodeMsg);

System.out.println("加密前:" + msg);

System.out.println("加密后:" + encodeMsg);

System.out.println("解密后:" + decodeMsg);

}

}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,908評論 6 541
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,324評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,018評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,675評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,417評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,783評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,779評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,960評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,522評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,267評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,471評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,009評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,698評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,099評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,386評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,204評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,436評論 2 378

推薦閱讀更多精彩內容

  • 姓名:于川皓 學號:16140210089 轉載自:https://baike.baidu.com/item/RS...
    道無涯_cc76閱讀 2,589評論 0 1
  • RSA是第一個比較完善的公開密鑰算法,它既能用于加密,也能用于數字簽名。RSA以它的三個發明者Ron Rivest...
    暗物質閱讀 1,718評論 0 0
  • 公鑰密碼系統及RSA公鑰算法 本文簡單介紹了公開密鑰密碼系統的思想和特點,并具體介紹了RSA算法的理論基礎,工作原...
    火狼o閱讀 4,310評論 2 15
  • RSA加密算法是最常用的非對稱加密算法,CFCA在證書服務中離不了它。但是有不少新來的同事對它不太了解,恰好看到一...
    ikin閱讀 2,125評論 0 5
  • MD5的全稱是Message-Digest Algorithm 5,在90年代初由MIT的計算機科學實驗室和RSA...
    沒能唱給你的歌曲閱讀 982評論 2 6