官方文档:https://docs.python.org/zh-cn/3/library/hashlib.html
什么是加密
将明文信息改变为难以读取的密文内容,使之不可读的过程。密文数据的表现形式一般都是一串没有规则的字符串
加密算法
加密算法有很多,算法的难易程度可以根据产生密文的长短来判断,越长意味着算法越复杂。常见的有。常见的 对称加密 算法主要有 DES
、3DES
、AES
等,常见的 非对称算法 主要有 RSA
、DSA
等,散列算法 主要有 SHA-1
、MD5
等
什么时候使用加密
涉及到隐私数据的时候,应该考虑使用加密,最为常见的就是对用户的密码加密,防止密码泄露
使用
普通加密
import hashlib
# 1.指定md5算法(最为常见)
md5 = hashlib.md5()
# 2.将明文数据传递给算法对象
md5.update(b'123') # 只能接收bytes类型
"""如果字符串中是纯数字和英文 那么直接在前面加b转成bytes类型"""
# 3.获取加密之后的密文数据
res = md5.hexdigest()
print(res)
# 202cb962ac59075b964b07152d234b70
"""加密之后的结果是无法直接反解密的 """
# 所谓的反解密其实是暴力破解,反复的猜
{'密文1':123,'密文2':321}
加盐处理
目的是为了增加破解的难度(添加一些额外的干扰项)
import hashlib
md5 = hashlib.md5()
# 加盐处理
md5.update('这是加盐的内容'.encode('utf8'))
md5.update(b'123')
res = md5.hexdigest()
print(res)
# daa22f9b2e6560ded7fe0bc29dfac35b
# 动态加盐
times = str(datetime.date.today()) # 通过当前年月日进行动态加盐
md5.update(times.encode())
md5.update(b'123')
res = md5.hexdigest()
print(res)
# 07f7006c551222d7478932efe136aaf8
应用场景
密码加密如何比对
通过用户输入的明文,进行相同的加密算法变成密文,拿着密文与数据库里面的密文进行对比,如果一致就是密码正确不一致就是错误
文件内容一致性校验
用户在下载软件之后,也会对内容做相同的加密,之后比对两次密文是否一致,如果一致表示中途没有被修改,如果不是表示中途被修改过,可能存在病毒。针对大文件一致性校验的优化策略,可以考虑对文件内容进行切片读取并加密的操作