【python 内置模块】hashlib

2024-01-20 00:00:00

目录:

计算字符串的哈希值

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

返回首页

本文总阅读量  次
皖ICP备17026209号-3
总访问量: 
总访客量: