目录:
import hashlib
md5_plain_text = 'admin'
md5_hash = hashlib.md5()
md5_hash.update(md5_plain_text.encode('utf-8'))
md5_cipher_text = md5_hash.hexdigest()
print(md5_cipher_text)
# 输出类似: 21232f297a57a5a743894a0e4a801fc3
sha256_plain_text = 'admin'
sha256_hash = hashlib.sha256()
sha256_hash.update(sha256_plain_text.encode('utf-8'))
sha256_cipher_text = sha256_hash.hexdigest()
print(sha256_cipher_text)
# 输出: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
其他算法如 SHA-1、SHA-384、SHA-512 的使用方式完全相同,只需更换构造函数即可。
计算文件的哈希值,通常用于完整性校验。可以将计算得到的哈希值与官方或可信来源提供的哈希值进行比对,以验证文件在下载或传输过程中是否被篡改或损坏
import hashlib
def calculate_file_hash(filepath, algorithm='sha256'):
"""计算文件的哈希值,默认使用 SHA-256"""
hash_func = hashlib.new(algorithm) # 动态指定算法
with open(filepath, 'rb') as f: # 以二进制模式打开
for chunk in iter(lambda: f.read(4096), b""): # 每次读取 4096 字节
hash_func.update(chunk)
return hash_func.hexdigest()
file_hash = calculate_file_hash('./test.json')
print(f"文件的 SHA-256 哈希值为: {file_hash}")
# 64891d421aa32783b64dddc60f88346e1fd2b953bda336c8dfd451e2bf0ba828
为了提高安全性,防止“彩虹表”攻击,通常在哈希计算前为原始数据添加一个随机字符串(盐)。
彩虹表攻击:通过预先计算并存储大量明文密码与其对应哈希值的映射关系(即彩虹表),来快速逆向查找哈希值对应的原始密码,从而绕过哈希函数的单向性限制。
import hashlib
# 加盐的 MD5 加密
salt = 'VGDziCPrYaGn'
data = 'admin'
# 方法一:在构造函数中传入盐
hash_obj = hashlib.md5(salt.encode('utf-8'))
hash_obj.update(data.encode('utf-8'))
print(hash_obj.hexdigest() )
# 79bdfa6239eb8a65050e544dcec7a67a
# 方法二:更常见的做法是手动拼接
combined = salt + data
hash_obj2 = hashlib.md5(combined.encode('utf-8'))
print(hash_obj2.hexdigest())
# 79bdfa6239eb8a65050e544dcec7a67a
↶ 返回首页 ↶