一、概述
二津坑、對稱加密
三妙蔗、RSA加密
四、OpenSSL使用
一疆瑰、概述
RSA是一種非對稱加密算法眉反,1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的穆役,因此以三人姓氏的首字母命名了該非對稱加密算法寸五,RSA算法。
提到非對稱加密耿币,下面簡單看一下對稱加密流程:
二梳杏、對稱加密
先舉個栗子:
1、天王蓋地虎對寶塔鎮(zhèn)河妖淹接,我們都知道十性,所以你給我發(fā)天王蓋地虎,我就翻譯成寶塔鎮(zhèn)河妖塑悼。因此對稱加密也可以說是秘密交易者的暗號烁试;
2、戰(zhàn)爭片中的電報拢肆,發(fā)送方和接收方都有一個密碼本减响,每一個字母都有與之對應(yīng)的密文,發(fā)送時對照密碼本發(fā)送密文郭怪,接收時拿密文在密碼本上進(jìn)行比對支示;
3、開發(fā)中如同我告訴接收方我給你的數(shù)據(jù)都是用base64
加密的鄙才,那么接收方就可以采用base64
解密颂鸿。
綜上所知,消息發(fā)送方與接收方均知道對數(shù)據(jù)的處理方式攒庵,那么我們稱這種處理方式方法為秘鑰(key
)嘴纺,也就是上面暗號的上下句败晴,密碼本,base64
栽渴。對數(shù)據(jù)加密解密都是由一個秘鑰(key
)來處理尖坤,消息發(fā)送端和消息接收端同時存有秘鑰(key
),因此也稱之為單秘鑰加密闲擦。第三方可以通過歸納總結(jié)或強(qiáng)行獲取秘鑰(key
)慢味,如果第三方拿到了秘鑰(key
)那么消息也就會被第三方獲取,所以對稱加密安全性一般墅冷,適用與一般數(shù)據(jù)加密纯路。如下圖:
三、RSA加密
RSA
非對稱加密存在大量的取模運(yùn)算寞忿,加密速度慢驰唬,只適用于對小數(shù)據(jù)量加密,所有在應(yīng)用中經(jīng)常結(jié)合對稱加密使用腔彰,對對稱加密的私鑰進(jìn)行加密叫编。非對稱加密應(yīng)用有支付寶,微信等支付做簽名驗證萍桌,蘋果開發(fā)證書簽名等。
歐拉函數(shù)
在數(shù)論中凌简,存在正整數(shù) n
上炎,小于n
并且與n
互質(zhì)的正整數(shù)的數(shù)目稱為n
的歐拉函數(shù)記著φ(n)
。例如:
φ(7)
7對應(yīng)的比7小的與7互質(zhì)的數(shù)有1雏搂、2藕施、3、4凸郑、5裳食、6共6
個,因此φ(7)=6
芙沥;
φ(8)
8對應(yīng)的比8小的與8互質(zhì)的數(shù)有1诲祸,3,5而昨,7共4
個救氯,因此φ(8)=4
;
φ(9)
9對應(yīng)的比9小的與9互質(zhì)的數(shù)有1歌憨,2着憨,4,5务嫡,7甲抖,8共6
個漆改,,因此φ(9)=6
准谚。
互質(zhì):除了1沒有其他公因數(shù)的兩個整數(shù)挫剑,稱為互質(zhì)整數(shù)。
通式:φ(x)=x∏(1-1/pi) 1=<x<n
氛魁。(p1~pn
為x
的所有質(zhì)因數(shù))
若m n
互質(zhì):φ(n * m)=φ(n)* φ(m)
暮顺,如果n
為質(zhì)數(shù)那么φ(n)=n-1
。
分解質(zhì)因數(shù)求值:φ(12)=φ(4 * 3)=φ( 2^2 * 3^1 )=( 2^2 - 2^1 ) * (3^1 - 3^0)=4
秀存。
歐拉定理
如果兩個正整數(shù)m
和n
互質(zhì)捶码,那么m
的φ(n)
次方對n取余衡等于1
。m^φ(n)%n≡1
或链。
費(fèi)馬小定理
存在一個質(zhì)數(shù)p
惫恼,而整數(shù)a
不是p
的倍數(shù),則存在a^(p-1)%p≡1
澳盐。費(fèi)馬小定理是歐拉定理的特殊情況祈纯。因為φ(p)=p-1
(任何數(shù)都與質(zhì)數(shù)互質(zhì))。
模反元素
如果兩個正整數(shù)e
和x
互質(zhì)叼耙,那么一定存在一個整數(shù)d
腕窥,使得ed-1
能夠被x
整除,則稱d
是e
對x
的模反元素筛婉。e * d % x≡1
簇爆,那么e * d ≡ k*x+1
。
由以上定理得出以下幾個公式:
1爽撒、m^φ(n)%n≡1
2入蛆、m^(k * φ(n))%n≡1
(兩端同乘以m
)
3、m^(k * φ(n)+1)%n≡m
4硕勿、e * d≡k * x+1
5哨毁、m^e * d%n≡m
(替換第3步k * φ(n)+1
)
而m^e*d%n≡m
就是我們需要的一個非對稱加密的公式。m
為明文源武,e
和d
分別對應(yīng)的是公鑰私鑰扼褪。迪菲卡爾曼秘鑰交換對公式拆分:
m^e%n=c
加密
c^d%n=m
解密
其中c
為通過e
加密后的密文,然后通過d
可以解出明文m
粱栖。因此:
公鑰: e
迎捺、n
秘鑰:d
、n
明文:m
密文:c
RSA加密過程
1查排、取兩個質(zhì)數(shù)p1
凳枝、p2
;
2、確定n
值岖瑰,n=p1 * p2
叛买,n
值一般會很大長度一般為1024
個二進(jìn)制位;
3蹋订、確定φ(n)
率挣,φ(n)=(p1-1) * (p2-1)
;
4露戒、確定e
值椒功,1<e<φ(n)
,e
為整數(shù)并且與φ(n)
互質(zhì)智什;
5动漾、確定d
值,e*d%φ(n)=1
荠锭;
6旱眯、加密 c=m^e%n
;
7证九、解密m=c^d%n
删豺。
實(shí)際驗證:
1、p1=3
愧怜, p2=7
呀页;
2、n=p1 * p2=3 * 7=21
拥坛;
3蓬蝶、φ(n)=(p1-1) * (p2-1)=2*6=12
;
4渴逻、1<e<12
疾党,e=5
(e
與12
互質(zhì)則取值{1,5,7,11}
音诫,φ(12)=4
個互質(zhì)數(shù)惨奕,滿足條件的有4
個);
5竭钝、e * d % φ(n)=5 * d % 12=1
梨撞,得d=17
;
6香罐、設(shè)置明文m=3
卧波,則c = m^e % n = 3^5 % 21=12
;
7庇茫、解密密文m=c^d % n=12^17 % 21=3
港粱。
數(shù)據(jù)傳輸過程(迪菲赫爾曼秘鑰交換):
四、OpenSSL
OpenSSL
是Mac
系統(tǒng)內(nèi)置的開源加密庫,我們可以是用終端來獲取私鑰公鑰查坪,數(shù)據(jù)加密寸宏。
主要命令:
1、生成一個RSA私鑰
openssl genrsa -out private.pem 1024
2偿曙、從私鑰中提取公鑰
openssl rsa -in private.pem -pubout -out public.pem
3氮凝、將私鑰轉(zhuǎn)換成明文
openssl rsa -in private.pem -text -out private.txt
4、通過公鑰進(jìn)行加密
openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enmsg.txt
5望忆、通過私鑰進(jìn)行解密
openssl rsautl -decrypt -in enmsg.txt -inkey private.pem -out demsg.txt
6罩阵、通過私鑰進(jìn)行加密
openssl rsautl -sign -in message.txt -inkey private.pem -out enmsg2.txt
7、通過公鑰進(jìn)行解密
openssl rsautl -verify -in enmsg2.txt -inkey public.pem -pubin -out demsg2.txt
通過終端顯示加密解密過程:
1启摄、創(chuàng)建私鑰公鑰:
2稿壁、查看私鑰公鑰:
3、創(chuàng)建文本:
4鞋仍、公鑰對數(shù)據(jù)加密:
5常摧、私鑰解密:
6、私鑰加密:
7威创、公鑰解密:
來看看長什么樣:
這么看就很熟悉了落午。