26.Python基础篇-hashlib模块

hashlib模块介绍

是 Python 标准库中的模块,用于生成各种安全哈希值和消息摘要。它支持多种哈希算法(如 MD5、SHA 系列等),广泛用于数据完整性校验和密码安全场景。

哈希算法

哈希算法:将任意长度的输入数据映射为固定长度的输出值(哈希值),输出值是数据的唯一标识。

哈希算法是不可逆的,只可以加密,无法解密。但是同样的值多次哈希得到的结果是一样的。

hashlib模块支持的算法:

  • MD5md5()(不推荐用于密码加密,因已被破解)。
  • SHA-1sha1()(较 MD5 更安全,但已不被推荐用于高安全场景)。
  • SHA-2 系列sha224()sha256()sha384()sha512()(目前常用,安全性较高)。

基本用法

第一步:创建哈希对象

import hashlib

# 使用算法创建哈希对象
hash_obj = hashlib.md5()       # MD5 算法
hash_obj = hashlib.sha256()    # SHA-256 算法

第二步:更新数据

哈希对象的 update() 方法可以更新待加密数据。数据可以更新多次,最终生成一个哈希值

data = b"Hello, hashlib!"  # 数据需为bytes类型
hash_obj.update(data)  # update添加待哈希数据
hash_obj.update(b'hello')  # 再次update

第三步:获取哈希值

# 两种方式
# 第一种:获取十六进制格式
hex_result = hash_obj.hexdigest()
print(hex_result)  # e.g., "d91b3f420b9f19e40ac4d2a25ad0b692"

# 第二种:获取二进制格式
byte_result = hash_obj.digest()
print(byte_result)  # e.g., b'\xd9\x1b?B\x0b\x9f\x19\xe4...'

不同哈希算法的介绍:

MD5:速度快,但已不安全,不适用于密码存储或加密场景。

SHA-256:更安全,广泛用于校验文件完整性。

BLAKE2:比 SHA 系列更快,安全性强。

如何选择:

用于密码存储时应使用SHA-256和BLAKE2

用于文件校验可以使用SHA-1或选择更安全的SHA-256或BLAKE2

加盐

加盐的目的: 

防止彩虹表攻击
彩虹表是一个预先计算好的哈希值-原文对照表。如果直接对原文进行哈希处理,攻击者可以通过彩虹表轻松找到匹配的原文。

  • 加盐后:即使两人使用相同的密码,加盐后的哈希值也完全不同。

防止重复哈希值
相同的密码如果没有加盐,会产生相同的哈希值,暴露用户密码的模式。

  • 加盐后:每个密码的哈希值唯一,无法通过重复的哈希值推断密码。

如何加盐:

import hashlib

md5 = hashlib.md5()
md5.update(bytes('', encoding='utf-8'))  # 先把盐更新进去。不是必须放在前面,可以随便放。
md5.update(b"password")  # 假设password是密码
hex_md5 = md5.hexdigest()
print(hex_md5)  # fffe343da367b45368df0f90391812b6

应用场景

1.使用哈希值校验文件的完整性

  在网络传输或存储过程中,可能会因为信号干扰、硬件故障等原因导致文件损坏。

      使用哈希值校验可以检测文件是否因意外原因发生了内容变化。

   文件下载后,与官方提供的哈希值(如 MD5、SHA-256)比对,确保文件未被篡改

2.哈希密码用于存储和验证

posted @ 2024-12-10 23:49  邵杠杠  阅读(10)  评论(0编辑  收藏  举报