Python学习笔记-常用模块介绍--hashlib哈希函数
1.hash算法是什么?
- 传入的值一样,结果一样。
- 一种哈希算法算出来的结果,长度固定。
- 不能反解。
2.(扩展知识)文件下载完成后,进度显示100%,为什么不能立马打开?
- 下载完成后,会进行文件的哈希校验。
- 用哈希校验来判断,这个文件传输过程中有没有损坏。
3.示例1:
import hashlib m = hashlib.md5() m.update("你好".encode("utf-8")) # 只接受bite类型 m.update("123".encode("utf-8")) print(m.hexdigest()) # 36473306e94d8d0f8dc4af5d4d9e17cc n = hashlib.md5() n.update("你好".encode("utf-8")) # 只接受bite类型 n.update("12".encode("utf-8")) n.update("3".encode("utf-8")) print(n.hexdigest()) # 36473306e94d8d0f8dc4af5d4d9e17cc
4.如何计算文件哈希值?
# 如何计算文件的哈希值? m = hashlib.md5() with open(r"./哈希计算.zip",mode="rb") as f: m.update(f.read()) print(m.hexdigest()) # 76cdb2bad9582d23c1f6f4d868218d6c
5.计算文件哈希值,文件很大怎么办?
# 如何计算文件的哈希值? m = hashlib.md5() with open(r"./哈希计算.zip",mode="rb") as f: # m.update(f.read()) for line in f: # 防止文件过大,占用内存过大 m.update(line) print(m.hexdigest()) # 76cdb2bad9582d23c1f6f4d868218d6c
6.计算文件的哈希值,会真的for循环遍历所有吗?
- 当文件很大的时候,比如10G,for循环必定是很慢的。
- 所以,实际中,为了提升速度,我们会采取,抽样采集。
- 比如,10%的位置采集10个字符,20%的位置采集10个字符...
- 这种,不能保证100%的完整性,不过也达到了99.99%的正确率,这是可以接受的。
- 相比起,速度太慢,损失客户,和0.01%错误率,后者损失较小。
7.密码加密。
-
m = hashlib.md5() password = "liqi1234" m.update(password.encode("utf-8")) print(m.hexdigest())
8.密码如何更安全?
-
加大破解难度
- 例如,加盐
参考资料:
https://www.cnblogs.com/linhaifeng/articles/6384466.html#_label10