一、概述
二、对称加密
三、RSA加密
四、OpenSSL使用
一、概述
RSA是一种非对称加密算法,1977年由罗纳德·李维斯特(Ron Rivest)、阿迪·萨莫尔(Adi Shamir)和伦纳德·阿德曼(Leonard Adleman)一起提出的,因此以三人姓氏的首字母命名了该非对称加密算法,RSA算法。
提到非对称加密,下面简单看一下对称加密流程:
二、对称加密
先举个栗子:
1、天王盖地虎对宝塔镇河妖,我们都知道,所以你给我发天王盖地虎,我就翻译成宝塔镇河妖。因此对称加密也可以说是秘密交易者的暗号;
2、战争片中的电报,发送方和接收方都有一个密码本,每一个字母都有与之对应的密文,发送时对照密码本发送密文,接收时拿密文在密码本上进行比对;
3、开发中如同我告诉接收方我给你的数据都是用base64
加密的,那么接收方就可以采用base64
解密。
综上所知,消息发送方与接收方均知道对数据的处理方式,那么我们称这种处理方式方法为秘钥(key
),也就是上面暗号的上下句,密码本,base64
。对数据加密解密都是由一个秘钥(key
)来处理,消息发送端和消息接收端同时存有秘钥(key
),因此也称之为单秘钥加密。第三方可以通过归纳总结或强行获取秘钥(key
),如果第三方拿到了秘钥(key
)那么消息也就会被第三方获取,所以对称加密安全性一般,适用与一般数据加密。如下图:
三、RSA加密
RSA
非对称加密存在大量的取模运算,加密速度慢,只适用于对小数据量加密,所有在应用中经常结合对称加密使用,对对称加密的私钥进行加密。非对称加密应用有支付宝,微信等支付做签名验证,苹果开发证书签名等。
欧拉函数
在数论中,存在正整数 n
,小于n
并且与n
互质的正整数的数目称为n
的欧拉函数记着φ(n)
。例如:
φ(7)
7对应的比7小的与7互质的数有1、2、3、4、5、6共6
个,因此φ(7)=6
;
φ(8)
8对应的比8小的与8互质的数有1,3,5,7共4
个,因此φ(8)=4
;
φ(9)
9对应的比9小的与9互质的数有1,2,4,5,7,8共6
个,,因此φ(9)=6
。
互质:除了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
。
由以上定理得出以下几个公式:
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
分别对应的是公钥私钥。迪菲卡尔曼秘钥交换对公式拆分:
m^e%n=c
加密
c^d%n=m
解密
其中c
为通过e
加密后的密文,然后通过d
可以解出明文m
。因此:
公钥: e
、n
秘钥:d
、n
明文:m
密文:c
RSA加密过程
1、取两个质数p1
、p2
;
2、确定n
值,n=p1 * p2
,n
值一般会很大长度一般为1024
个二进制位;
3、确定φ(n)
,φ(n)=(p1-1) * (p2-1)
;
4、确定e
值,1<e<φ(n)
,e
为整数并且与φ(n)
互质;
5、确定d
值,e*d%φ(n)=1
;
6、加密 c=m^e%n
;
7、解密m=c^d%n
。
实际验证:
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
互质则取值{1,5,7,11}
,φ(12)=4
个互质数,满足条件的有4
个);
5、e * d % φ(n)=5 * d % 12=1
,得d=17
;
6、设置明文m=3
,则c = m^e % n = 3^5 % 21=12
;
7、解密密文m=c^d % n=12^17 % 21=3
。
数据传输过程(迪菲赫尔曼秘钥交换):
四、OpenSSL
OpenSSL
是Mac
系统内置的开源加密库,我们可以是用终端来获取私钥公钥,数据加密。
主要命令:
1、生成一个RSA私钥
openssl genrsa -out private.pem 1024
2、从私钥中提取公钥
openssl rsa -in private.pem -pubout -out public.pem
3、将私钥转换成明文
openssl rsa -in private.pem -text -out private.txt
4、通过公钥进行加密
openssl rsautl -encrypt -in message.txt -inkey public.pem -pubin -out enmsg.txt
5、通过私钥进行解密
openssl rsautl -decrypt -in enmsg.txt -inkey private.pem -out demsg.txt
6、通过私钥进行加密
openssl rsautl -sign -in message.txt -inkey private.pem -out enmsg2.txt
7、通过公钥进行解密
openssl rsautl -verify -in enmsg2.txt -inkey public.pem -pubin -out demsg2.txt
通过终端显示加密解密过程:
1、创建私钥公钥:
2、查看私钥公钥:
3、创建文本:
4、公钥对数据加密:
5、私钥解密:
6、私钥加密:
7、公钥解密:
来看看长什么样:
这么看就很熟悉了。