加密算法的分类
以算法是否可逆分为:
- 可逆算法
- 不可逆算法(hash算法)
在可逆算法中根据是否使用同一个密钥可分为:
- 对称加密:解密与加密使用的是同一个密钥
- 不对称加密:解密与加密使用的是一对密钥(公钥、密钥)
对称加密算法的优点:加密与解密的高速度和使用长密钥时的难破解性
对称加密算法的缺点:不安全
非对称加密算法的优点:安全
非对称加密算法的缺点:速度慢,效率低
hash(哈希)算法:符合散列思想的算法
解释:把任意长度的输入通过散列算法变换成固定长度的输出,该输出成为散列值,其转换就是压缩映射,一般来说散列值空间通常小于输入空间,不同的输入可能会散列成相同的输出,因此不能从散列值缺点唯一的输入值
哈希算法又称摘要算法,因此摘要也称哈希值、散列值,即输入任何长度的数据,都会输出固定长度的数据,该数据就称为哈希值
hashlib库
python中的hashlib模块即是一个专门提供hash算法的模块(其中包括md5、sha1、sha224、sha256、sha384、sha512等等)
hash算法的实现:
创建一个算法对象(接收的是字节数据而不是字符串,因此我们需要将字符串转换为字节数据)
import hashlib
#创建一个算法对象
a = hashlib.md5("123".encode("utf-8"))
print(a.hexdigest())
其打印结果为密文:
202cb962ac59075b964b07152d234b70
验证其密文可使用md5在线解密破解,md5解密加密来验证
在没有盐值混淆的情况下,其密文很容易被破解
因此一般要使用盐值混淆进行加密处理(盐值越复杂,安全性越高):
import hashlib
#创建一个算法对象
a = hashlib.md5("123".encode("utf-8"))
#盐值混淆
a.update("123##&*^*&^*5#".encode("utf-8"))
print(a.hexdigest())
7062956fc04808dec4c42c783f032938
哈希运算消息认证码
Hmac为Hash-based Message Authentication Code的缩写,hmac即密钥相关的哈希运算消息认证码,它是一个需要密钥的算法,可以对可变长度的消息进行认证,把输出的结果作为认证符
hmac库
hmac库也为一个哈希加密库(对称加密),在hmac库中提供了一个new函数来创建对象去计算消息签名
import hmac,hashlib
a = hmac.new("123".encode("utf-8"),"$%^*".encode("utf-8"),hashlib.md5)
print(a.hexdigest())
其中第一个参数为要加密的字符串,第二个参数为盐值,第三个参数为加密算法
在这个过程中首先使用了对称加密(盐值为密钥),后将加密后的数据进行了hash加密、盐值混淆