1、概述算法
2、對稱加密安全
3、RSA加密bash
RSA是一種非對稱加密算法,1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一塊兒提出的,所以以三人姓氏的首字母命名了該非對稱加密算法,RSA算法。函數
提到非對稱加密,下面簡單看一下對稱加密流程:加密
先舉個栗子:spa
一、天王蓋地虎對寶塔鎮河妖,咱們都知道,因此你給我發天王蓋地虎,我就翻譯成寶塔鎮河妖。所以對稱加密也能夠說是祕密交易者的暗號;翻譯
二、戰爭片中的電報,發送方和接收方都有一個密碼本,每個字母都有與之對應的密文,發送時對照密碼本發送密文,接收時拿密文在密碼本上進行比對;3d
三、開發中如同我告訴接收方我給你的數據都是用base64
加密的,那麼接收方就能夠採用base64
解密。code
綜上所知,消息發送方與接收方均知道對數據的處理方式,那麼咱們稱這種處理方式方法爲祕鑰(key
),也就是上面暗號的上下句,密碼本,base64
。對數據加密解密都是由一個祕鑰(key
)來處理,消息發送端和消息接收端同時存有祕鑰(key
),所以也稱之爲單祕鑰加密。第三方能夠經過概括總結或強行獲取祕鑰(key
),若是第三方拿到了祕鑰(key
)那麼消息也就會被第三方獲取,因此對稱加密安全性通常,適用與通常數據加密。以下圖:
RSA
非對稱加密存在大量的取模運算,加密速度慢,只適用於對小數據量加密,全部在應用中常常結合對稱加密使用,對對稱加密的私鑰進行加密。非對稱加密應用有支付寶,微信等支付作簽名驗證,蘋果開發證書籤名等。 歐拉函數 在數論中,存在正整數 n
,小於n
而且與n
互質的正整數的數目稱爲n
的歐拉函數記着φ(n)
。例如: φ(7)
7對應的比7小的與7互質的數有一、二、三、四、五、6共6
個,所以φ(7)=6
; φ(8)
8對應的比8小的與8互質的數有1,3,5,7共4
個,所以φ(8)=4
; φ(9)
9對應的比9小的與9互質的數有1,2,4,5,6,7,8共7
個,,所以φ(9)=7
。
互質: 除了1沒有其餘公因數的兩個整數,稱爲互質整數。
通式:φ(x)=x∏(1-1/pi) 1=<x<n
。(p1~pn
爲x
的全部質因數)
若m n
互質:φ(n * m)=φ(n)* φ(m)
,若是n
爲質數那麼φ(n)=n-1
。
分解質因數求值:φ(12)=φ(4 * 3)=φ( 2^2 * 3^1 )=( 2^2 - 2^1 ) * (3^1 - 3^0)=4
。
歐拉定理 若是兩個正整數m
和n
互質,那麼m
的φ(n)
次方對n取餘衡等於1
。m^φ(n)%n≡1
。
費馬小定理 存在一個質數p
,而整數a
不是p
的倍數,則存在a^(p-1)%p≡1
。費馬小定理是歐拉定理的特殊狀況。由於φ(p)=p-1
(任何數都與質數互質)。
模反元素 若是兩個正整數e
和x
互質,那麼必定存在一個整數d
,使得ed-1
可以被x
整除,則稱d
是e
對x
的模反元素。e * d % x≡1
,那麼e * d ≡ k*x+1
。
由以上定理得出如下幾個公式: 一、m^φ(n)%n≡1
二、m^(k * φ(n))%n≡1
兩端同乘以m
三、m^(k * φ(n)+1)%n≡m
四、e * d≡k * x+1
五、m^e * d%n≡m
替換第3步k * φ(n)+1
而m^e*d%n≡m
就是咱們須要的一個非對稱加密的公式。m
爲明文,e
和d
分別對應的是公鑰私鑰。迪菲卡爾曼祕鑰交換對公式拆分: m^e%n=c
加密 c^d%n=m
解密 其中c
爲經過e
加密後的密文,而後經過d
能夠解出明文m
。所以: 公鑰: e
、n
祕鑰:d
、n
明文:m
密文:c
RSA加密過程 一、取兩個質數p1
、p2
; 二、肯定n
值,n=p1 * p2
,n
值通常會很大長度通常爲1024
個二進制位; 三、肯定φ(n)
,φ(n)=(p1-1) * (p2-1)
; 四、肯定e
值,1<e<φ(n)
,e
爲整數而且與φ(n)
互質; 五、肯定d
值,e*d%φ(n)=1
; 六、加密 c=m^e%n
; 七、解密m=c^d%n
。
實際驗證: 一、p1=3
, p2=7
; 二、n=p1 * p2=3 * 7=21
; 三、φ(n)=(p1-1) * (p2-1)=2*6=12
; 四、1<e<12
,e=5
(e
與12
互質則取值{1,5,7,11}
,φ(12)=4
個互質數,知足條件的有4
個); 五、e * d % φ(n)=5 * d % 12=1
,得d=17
; 六、設置明文m=3
,則c = m^e % n = 3^5 % 21=12
; 七、解密密文m=c^d % n=12^17 % 21=3
。
數據傳輸過程:
OpenSSL
是Mac
系統內置的開源加密庫,咱們能夠是用終端來獲取私鑰公鑰,數據加密。
主要命令:
一、生成一個RSA私鑰
openssl genrsa -out private.pem 1024
二、從私鑰中提取公鑰
openssl rsa -in private.pem -pubout -out public.pem
三、將私鑰轉換成明文
openssl rsa -in private.pem -text -out private.txt
四、經過公鑰進行加密
openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enmsg.txt
五、經過私鑰進行解密
openssl rsautl -decrypt -in enmsg.txt -inkey private.pem -out demsg.txt
六、經過私鑰進行加密
openssl rsautl -sign -in message.txt -inkey private.pem -out enmsg2.txt
七、經過公鑰進行解密
openssl rsautl -verify -in enmsg2.txt -inkey public.pem -pubin -out demsg2.txt
複製代碼
經過終端顯示加密解密過程:
一、建立私鑰公鑰:
二、查看私鑰公鑰:
三、建立文本:
四、公鑰對數據加密:
五、私鑰解密:
六、私鑰加密:
七、公鑰解密:
來看看長什麼樣:
這麼看就很熟悉了,哈哈,能夠用起來。