一.引入
1.什么是算法
- 算法就是高效解决问题的方法
- 一种算法就是用来解决一种特定问题的
比如从10000个从小到大排列且不连续数字里找出8654
普通方法就是用眼瞅,从左到右
运气好瞅一次,运气不好瞅一万次
于是就有了二分法,取出中间的值
左边的值一定比中间的值小
右边的值一定比中间的值大
于是找到8654所用的时间大大缩短
2.hash哈希算法
可以把把文本内容/一串字符计算成一串 hash 值
一串内容---->"hash"算法---->"hash"值
-
md5
-
sha512
-
sha256
3.hash值的三大特点
- 传入的内容一样, 采用的 hash 算法一样, 得到的 hash 值也一定一样
- hash 不可逆推, 不能通过 hash 值反推出明文
- hash 值的长度取决于采用的 hash 算法, 与传入的内容多少无关
4.哈希的应用
- 结合特点 1 和 2 可以用于加密
- 结合特点 1 和 3 可以用于文件完整性校验
再网页上下载文件进度条100%后会卡一小些时间
其实就是在进行"hash"的校验
5.密码加盐
- 客户端向服务端提交密码会在客户端先通过算法加密
- 而服务端存有加密后的密码, 直接比对进行校验
- 但是这还是不够安全的,高技术的黑客可以拿着密文密码进行撞库或者写客户端直接提交截获到的密文
- 于是就出现了密码加盐的概念
⛅密码加盐相当于暗号,只有设置者知道
⛅示范:
正常密码: 123456
加盐密码: 派大星123456海绵宝宝
或者: 章1鱼2哥3蟹4老5板6
⛅加盐之后计算出来的"hash"是完全不一样的
⛅想要撞库的人就必须要猜到使用的算法和加的盐
一.hashlib 模块介绍
1.什么是 hashlib 模块
- hashlib 是 Python的内置模块
- 它为我们提供了多种安全的摘要方法
2.hashlib 模块的作用
- 目前在大部分操作系统下, hashlib模块支持
md5()
,sha1()
,sha224()
,sha256()
,sha384()
,sha512()
,blake2b()
....等多种hash构造方法 - 这些构造方法在使用上通用, 返回带有同样接口的hash对象, 差别只在于构造方法的选择, 也就是对算法的选择
- 得到对象后可以使用通用的
update()
方法将bytes类型的数据添加到对象里,最后通过digest()
(bytes摘要) 或者hexdigest()
(十六进制摘要) 方法获得当前的摘要