加密分类:
1 单向加密:md5,sha1 不可逆,摘要算法
2 对称加密:aes,des 可逆,加密和解密使用同一个秘钥
3 非对称加密:RSA,DSA 可逆,加密用公钥,解密用私钥
4 补充算法:base64 不是加密,只是编码
1. 对称加密
所谓对称加密就是加密和解密用的是同一个秘钥. 也称为共享密钥加密算法,是一种将明文加密成密文的加密算法。其特点是加密和解密使用相同的密钥,也就是说,密钥是公开的,双方通过协商得到同一个密钥,然后使用该密钥对明文进行加密和解密操作。
对称加密算法的优点是算法简单、加密解密速度快,适合对大量数据进行加密操作,而且加密强度较高,保密性较好。常用的对称加密算法有DES、3DES、AES、RC4等。
(1) AES
是目前最广泛应用的对称加密算法之一,其密钥长度可以是128位、192位或256位,比DES和3DES更安全可靠,而且加密解密速度较快,被广泛应用于各种领域的数据加密保护中。
加密:
"""
长度
16: *AES-128*
24: *AES-192*
32: *AES-256*
MODE 加密模式.
常见的ECB, CBC
ECB:是一种基础的加密方式,密文被分割成分组长度相等的块(不足补齐),然后单独一个个加密,一个个输出组成密文。
CBC:是一种循环模式,前一个分组的密文和当前分组的明文异或或操作后再加密,这样做的目的是增强破解难度。
CFB/OFB:实际上是一种反馈模式,目的也是增强破解的难度。
FCB和CBC的加密结果是不一样的,两者的模式不同,而且CBC会在第一个密码块运算时加入一个初始化向量。
"""
from Crypto.Cipher import AES
aes = AES.new(b"alexissbalexissb", mode=AES.MODE_CBC, IV=b"0102030405060708")
data = "我吃饭了"
data_bs = data.encode("utf-8")
# 需要加密的数据必须是16的倍数
# 填充规则: 缺少数据量的个数 * chr(缺少数据量个数)
pad_len = 16 - len(data_bs) % 16
data_bs += (pad_len * chr(pad_len)).encode("utf-8")
bs = aes.encrypt(data_bs)
print(bs)
解密:
from Crypto.Cipher import AES
aes = AES.new(b"alexissbalexissb", mode=AES.MODE_CBC, IV=b"0102030405060708")
# 密文
bs = b'\xf6z\x0f;G\xdcB,\xccl\xf9\x17qS\x93\x0e'
result = aes.decrypt(bs) # 解密
print(result.decode("utf-8"))
(2) DES
是一种比较常见的对称加密算法,它采用64位密钥对数据进行加密,加密和解密使用相同的密钥。但是由于其密钥长度较短,易受到暴力破解等攻击方式的影响,现在已经不再安全。
3DES是在DES基础上发展而来的一种加密算法,使用三个不同的密钥对数据进行三次加密,提高了密码强度,但是加密解密速度较慢。
加密:
from Crypto.Cipher import DES
# key: 8个字节
des = DES.new(b"alexissb", mode=DES.MODE_CBC, IV&