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

 

posted @ 2023-01-20 09:17  o蹲蹲o  阅读(78)  评论(0编辑  收藏  举报