RSA加密

1、概述算法

2、對稱加密安全

3、RSA加密bash

4、OpenSSL使用微信

1、概述

RSA是一種非對稱加密算法,1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一塊兒提出的,所以以三人姓氏的首字母命名了該非對稱加密算法,RSA算法。函數

提到非對稱加密,下面簡單看一下對稱加密流程:加密

2、對稱加密

先舉個栗子:spa

一、天王蓋地虎對寶塔鎮河妖,咱們都知道,因此你給我發天王蓋地虎,我就翻譯成寶塔鎮河妖。所以對稱加密也能夠說是祕密交易者的暗號;翻譯

二、戰爭片中的電報,發送方和接收方都有一個密碼本,每個字母都有與之對應的密文,發送時對照密碼本發送密文,接收時拿密文在密碼本上進行比對;3d

三、開發中如同我告訴接收方我給你的數據都是用base64加密的,那麼接收方就能夠採用base64解密。code

綜上所知,消息發送方與接收方均知道對數據的處理方式,那麼咱們稱這種處理方式方法爲祕鑰(key),也就是上面暗號的上下句,密碼本,base64。對數據加密解密都是由一個祕鑰(key)來處理,消息發送端和消息接收端同時存有祕鑰(key),所以也稱之爲單祕鑰加密。第三方能夠經過概括總結或強行獲取祕鑰(key),若是第三方拿到了祕鑰(key)那麼消息也就會被第三方獲取,因此對稱加密安全性通常,適用與通常數據加密。以下圖:

symmetric.png

3、RSA加密

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~pnx的全部質因數)

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

歐拉定理 若是兩個正整數mn互質,那麼mφ(n) 次方對n取餘衡等於1m^φ(n)%n≡1

費馬小定理 存在一個質數p,而整數a不是p的倍數,則存在a^(p-1)%p≡1。費馬小定理是歐拉定理的特殊狀況。由於φ(p)=p-1(任何數都與質數互質)。

模反元素 若是兩個正整數ex互質,那麼必定存在一個整數d,使得ed-1可以被x整除,則稱dex的模反元素。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爲明文,ed分別對應的是公鑰私鑰。迪菲卡爾曼祕鑰交換對公式拆分: m^e%n=c 加密 c^d%n=m 解密 其中c爲經過e加密後的密文,而後經過d能夠解出明文m。所以: 公鑰: en 祕鑰:dn 明文:m 密文:c

RSA加密過程 一、取兩個質數p1p2; 二、肯定n值,n=p1 * p2n值通常會很大長度通常爲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=3p2=7; 二、n=p1 * p2=3 * 7=21; 三、φ(n)=(p1-1) * (p2-1)=2*6=12; 四、1<e<12e=5e12互質則取值{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

數據傳輸過程:

RSA.png

4、OpenSSL

OpenSSLMac系統內置的開源加密庫,咱們能夠是用終端來獲取私鑰公鑰,數據加密。

主要命令:

一、生成一個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
複製代碼

經過終端顯示加密解密過程:

一、建立私鑰公鑰:

create.png

二、查看私鑰公鑰:

overview.png

三、建立文本:

message.png

四、公鑰對數據加密:

encode1.png

五、私鑰解密:

decode1.png

六、私鑰加密:

encode2.png

七、公鑰解密:

decode2.png

來看看長什麼樣:

cer.png

這麼看就很熟悉了,哈哈,能夠用起來。

相關文章
相關標籤/搜索