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

这么看就很熟悉了,哈哈,能够用起来。

相关文章
相关标签/搜索