# 对称加密存在的问题
1. 秘钥管理困难
2. 秘钥分发困难
两个人如何保证秘钥不被窃取?
==解决办法:引用非对称加密==

 

RSA

1. 基本概念

私钥:使用随机数按照一定规则生成的

公钥:由私钥推导而来。

随机数据 =》算法 =》 私钥 =》 公钥

私钥:只有自己持有,不可以向任何人传播

公钥:任何人都可以持有,公钥加密的数据只能被配套的私钥解开。

2. openssl生成方式

#目前主流密钥长度至少都是1024bits以上,低于1024bit的密钥已经不建议使用(安全问题)
OpenSSL> genrsa -out rsa_private_key.pem   1024  #生成私钥, 1024是密钥长度

#可以不指定私钥长度,默认是2048位,长度建议1024以上,这样安全!!


OpenSSL> rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem #生成公钥
OpenSSL> exit #退出OpenSSL程序

常见使用场景

1.通信加密

公钥加密,私钥解密

2. https

验证服务器,数字证书,使用ca认证公钥

3. 签名(防止篡改)

哈希+非对称加密

4. 网银U盾

验证client,U盾相当于私钥,公钥在服务端

5. github ssh(secure shell)登录

ssh: https://blog.csdn.net/PeipeiQ/article/details/80702514

ssh: https://www.cnblogs.com/yyds/p/6992125.html

> – ssh是一种网络协议,主要用于计算机之间的加密登录与数据传输
> – ssh登录的时候没有ca认证,需要用户自己确认登录主机的指纹,点击yes后把远程主机的指纹存放到本地的know_hosts中,后续登录会跳过警告。
> – ssh-keygen -t rsa,演示

RAS生成规则

拓展:什么是质数别名素数 反义词是合数
质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
所谓素数是说除1和它本身没有其他的约数,4除了1和4外,还有2这一个约数,所以它不是素数
4除了1和本身(4)以外,还有一个约数2。
4是合数
那么质数都有哪些
2 3 5 7 11 13 17 19 23 29 …

RSA生成规则 (了解知识点)
参考链接:https://www.cnblogs.com/jiftle/p/7903762.html

选择P,Q:100~200位的大素数

N: P * Q
F(n) = (P -1 )(Q - 1)
选择E:  1 < E < F(n)
D*E === 1 mod F(n), 同余运算符 =》 退出D
P:3, Q:11
N  : 3 * 11 = 33
F(n) = (3 -1)(11-1) = 2 * 10 = 20
E: 1 < E < 20 ==> 选 3
( D * E ) %F(n) = 1
( D * 3 ) %20 = 1  => D选择7
公钥: {E, N} => {3, 33}
私钥: {D, N} => {7, 33}

加密时,先对明文进行转换,对数值进行加密
解密时,先根据规则解密,根据字符表转换为明文