1.加密算法
1.1Aes
对称加密:加解密用同一个密钥
应用场景:VPN或代理加密通信
分组密码:把明文分成一组一组的,每组长度相等,每次加密一组数据,直到加密完整个明文。
在AES标准规范中,分组长度只能是128位,也就是说,每个分组为16个字节(每个字节8位)。密钥的长度可以使用128位、192位或256位。密钥的长度不同,推荐加密轮数也不同,如下表所示
AES | 密钥长度(32位) | 分组长度(32位) | 加密轮数 |
AES-128 | 4 | 4 | 10 |
AES-192 | 6 | 4 | 12 |
AES-256 | 8 | 4 | 14 |
对称加密模式
ECB(电码本模式Electronic Codebook Book)
CBC(密码分组链接模式Cipher Block Chaining)
这种模式是先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。
OFB(输出反馈模式Output FeedBack)
CFB(密码反馈模式Cipher FeedBack)
CTR(计算器模式Counter )
1.2 HMACSHA
Sha系列算法
常用的如Sha1、Sha256等。单向散列哈希算法。
Sha1已被破解。
MD5的摘要的长度尽128bit,SHA-1摘要长度160bit。多出32bit意味着什么呢?不同明文的碰撞几率降低了2^32 = 324294967296倍。
SHA-256:可以生成长度256bit的信息摘要。
SHA-224:SHA-256的“阉割版”,可以生成长度224bit的信息摘要。
信息摘要越长,发生碰撞的几率就越低,破解的难度就越大。但同时,耗费的性能和占用的空间也就越高。
SHA算法的底层原理类似Md5,只是摘要分段和处理细节不同。
HMAC算法
引入了密钥,使用单向散列函数来构造消息认证的方法
1.3 Md5
单向散列哈希算法
应用场景:生成信息的摘要,校验数据的完整性;生成唯一ID;存储密码
MD5、SHA256 等已经不在安全,特别是直接使用 MD5、SHA256等单向散列函数是很不推荐的,最好的方式是在使用 单向散列函数处理之前对明文进行 “加盐处理”,这样再限定一下密码长度跟复杂度
1.4 Rsa
非对称加密:加解密用两个密钥,公钥加密数据,私钥解密数据。
应用场景:密钥交换,证书等场景。
单纯的使用 对称加密(如:AES) 的来加密两者传输中,秘钥的传输是一个问题,一旦遭到网络监听,这个秘钥就没有存在的意义了。
单纯的用非对称加密虽然解决了监听问题,但是比较耗资源,对于一个访问量比较大的web服务来说,是不推荐的。
对称加密传输数据,非对称加密传输对称加密密钥。