常见加密方式
常见的机密方式
- 对称加密
- 密钥比较短
- 密钥只有一个,加密解密使用的密钥相同
- 加密的效率高
- 加密强度相对较低(相对于非对称加密)
- 密钥分发困难 -> 因为密钥要保密不能泄露,在网络环境中很容易就泄露出去了
AES
最安全,效率最高的公开的对称加密算法
密钥长度:16字节,24字节,32字节 是可选的,长度越长越安全,但是效率越低
分组加密,每组长度16字节
密文和明文的长度相同 == 16字节
DES/3DES
DES 密钥长度 8byte,
不安全,已经被破解
对数据分段加密,每组8字节
得到的密文和明文的长度相同
3DES 密钥长度 24byte,
安全的,效率比较低
- 非对称加密
- 密钥比较长
- 密钥有两个,所有的非对称加密算法都有生成密钥对的函数
- 这两个密钥对保存到不同的文件中,一个文件是公钥(比较小),一个是私钥(比较大)
- 公钥可以公开
- 私钥不能公开
- 加解密使用的密钥不同
- 如果使用公钥加密,必须私钥解密
- 如果使用私钥加密, 必须公钥解密
- 加密效率低
- 加密强度高
- 可以直接可以进行分发 ->分发公钥
RSA(数字签名和密钥交换)
ECC(椭圆曲线加密算法)
密钥交换的过程
-
为什么要交换
- 非对称加密密钥分发方便,但是效率低 -> 改进:需要使用对称加密
- 使用对称加密 -> 密钥分发困难 -> 改进: 使用非对称加密进行密钥分发
- 分发对称加密的密钥,本质就是一个字符串
-
密钥交换过程
- 在服务端生成一个非对称加密的密钥对: 公钥,私钥
- 服务器将公钥发送给客户端
- 在客户端生成一个随机字符串 -> 这就是对称加密需要的密钥
- 在客户端使用,对称加密的密钥进行加密 -> 密文
- 将加密的密文发送给服务器
- 服务端使用私钥解密 -> 对称加密的密钥
- 双方使用同一个密钥进行对称加密通信
- 双发使用同一密钥进行对称加密通信
Hash算法(单向散列函数)
- 特点
- 不管原始数据有多长,通过哈希算法进行计算,得到的结果的长度是固定的
- 是一个二进制的字符串
- 只要是原始数据不以样,得到的结果就不一样
- MD4/MD5
- 散列值长度: 16字节
- SHA-1
- 散列值长度: 20字节
- SHA-2
- SHA3-224/SHA3-256/SHA3-384/SHA3-512
- 有很强的抗碰撞性
- 碰撞: 原始数据不同,但是通过同样的哈希算法进行计算能得到相同的结果
- 推导的结论
- 数据不同得到的结果就不同
- 应用场景:
- 数据效验
- 登陆验证
- 秒传
- 不可逆
- 得到的结果不能推导初原始数据
- 不管原始数据有多长,通过哈希算法进行计算,得到的结果的长度是固定的
哈希运算的结果:
- 散列值
- 指纹
- 摘要
数字签名
- 作用:
- 效验数据有没有被篡改(完整性)
- 鉴别数据的所有者
- 不能对数据加密
- 数字签名的过程: -> 私钥加密数据
- 生成一个非对称加密的密钥对,分发公钥
- 使用哈希函数对原始数据进行哈希运算 -> 散列值
- 使用私钥对数据加密 -> 密文
- 将原始数据和密文一起发送给接收者
- 效验签名的过程:
- 接收签名的一方分发的公钥
- 接收签名者发送的数据: 原始数据 + 签名
- 对数据进行判断:
- 对接收的原始数据 -> 散列值new
- 和签名的时候使用的哈希函数相同(必须相同)
- 对接收的原始数据 -> 散列值new
- 使用公钥对签名(密文)解密-> 得到了散列值old
- 比较两个散列值
- 相同: 数据的所有者确实是A,并且数据没有被篡改
- 不同:数据的所有者不是A,或者数据被篡改了
浙公网安备 33010602011771号