轉發原文連接:RSA加密算法加密與解密過程解析算法
1.加密算法概述安全
加密算法根據內容是否能夠還原分爲可逆加密和非可逆加密。數據結構
可逆加密根據其加密解密是否使用的同一個密鑰而能夠分爲對稱加密和非對稱加密。函數
所謂對稱加密便是指在加密和解密時使用的是同一個密鑰:舉個簡單的例子,對一個字符串C作簡單的加密處理,對於每一個字符都和A作異或,造成密文S。解密的時候再用密文S和密鑰A作異或,還原爲原來的字符串C。這種加密方式有一個很大的缺點就是不安全,由於一旦加密用的密鑰泄露了以後,就能夠用這個密鑰破解其餘全部的密文。加密
非對稱加密在加密和解密過程當中使用不一樣的密鑰,即公鑰和私鑰。公鑰用於加密,全部人均可見,私鑰用於解密,只有解密者持有。就算在一次加密過程當中原文和密文發生泄漏,破解者在知道原文、密文和公鑰的狀況下沒法推理出私鑰,很大程度上保證了數據的安全性。spa
此處,咱們介紹一種很是具備表明性的非對稱加密算法,RSA加密算法。RSA算法是1977年發明的,全稱是RSA Public Key System,這個Public Key就是指的公共密鑰。.net
2.密鑰的計算獲取過程 code
密鑰的計算過程爲:首先選擇兩個質數p和q,令n=p*q。blog
令k=ϕ(n)=(p−1)(q−1),原理見4的分析rem
選擇任意整數d,保證其與k互質
取整數e,使得[de]k=[1]k。也就是說de=kt+1,t爲某一整數。
3.RSA加密算法的使用過程
一樣以一個字符串來進行舉例,例如要對字符串the art of programming進行加密,RSA算法會提供兩個公鑰e和n,其值爲兩個正整數,解密方持有一個私鑰d,而後開始加密解密過程過程。
1. 首先根據必定的規整將字符串轉換爲正整數z,例如對應爲0到36,轉化後造成了一個整數序列。
2. 對於每一個字符對應的正整數映射值z,計算其加密值M=(N^e)%n. 其中N^e表示N的e次方。
3. 解密方收到密文後開始解密,計算解密後的值爲(M^d)%n,可在此獲得正整數z。
4. 根據開始設定的公共轉化規則,便可將z轉化爲對應的字符,得到明文。
4.RSA加密算法原理解析
下面分析其內在的數學原理,說到RSA加密算法就不得不說到歐拉定理。
歐拉定理(Euler’s theorem)是歐拉在證實費馬小定理的過程當中,發現的一個適用性更廣的定理。
首先定義一個函數,叫作歐拉Phi函數,即ϕ(n),其中,n是一個正整數。
ϕ(n)=總數(從1到n−1,與n互質整數)
好比5,那麼1,2,3,4,都與5互質。與5互質的數有4個。ϕ(5)=4
再好比6,與1,5互質,與2,3,4並不互質。所以,ϕ(6)=2
對於一個質數p來講,它和1, 2, 3, …, p – 1都互質,因此ϕ(p)=p−1。好比ϕ(7)=6,ϕ(11)=10
歐拉定理敘述以下:
歐拉定理:若是n是一個正整數,a是任意一個非0整數,且n和a互質。那麼,a^ϕ(n)−1能夠被n整除。
推論1:若是m和n是互質的正整數。那麼,ϕ(mn)=ϕ(m)ϕ(n)
推論2:[ab]n=[[a]n[b]n]n
證實:假設a和b除以n的餘數爲c1,c2。a和b能夠寫成a=nt1+c1,b=nt2+c2。那麼,ab=n2t1t2+nt1c2+nt2c1+c1c2。所以ab除以n的餘數爲c1c2。即[ab]n=[a]n[b]n。
有以上定理後,由此能夠推導出RSA算法的內在原理。
根據歐拉定理,對於任意z,若是z與n互質,那麼:
[z^ϕ(n)]n=[z^k]n=[1]n
所以,
[z^(de)]n=[z^(kt+1)]n=[z^(kt)*z]n=[z^kt]n*[z]n= [z]n 由於[z^k]n = [1]n
上面主要使用了de=kt+1以及推論2。也就是說:
[z^(de)]n=[z]n
根據2的推論,有
([z^e]n)^d=[z]n
即d個餘數相乘,由於其乘積可能大於n,因此由[ab]n=[[a]n[b]n]n,例如令a和b都爲5,n爲3,可知該結論
故上式可描述爲[([z^e]n)^d]n=[z]n=z,就是原數字乘方求餘數,而後再乘方求餘數後獲得原來數字的過程,得證。
公開的加密方式,私有的解密方式。RSA安全的關鍵在於很難對一個大的整數進行因子分解。
5.RSA加密的缺點
1)產生密鑰很麻煩,受到素數產生技術的限制,於是難以作到一次一密。
2)安全性,RSA的安全性依賴於大數的因子分解,但並無從理論上證實破譯RSA的難度與大數分解難度等價,並且密碼學界多數人士傾向於因子分解不是NP問題。
3)速度太慢,因爲RSA 的分組長度太大,爲保證安全性,n 至少也要 600 bitx以上,使運算代價很高,尤爲是速度較慢,較對稱密碼算法慢幾個數量級;且隨着大數分解技術的發展,這個長度還在增長,不利於數據格式的標準化。