Python 生成文件或字符串的 sha256

本文指导如何使用Python的hashlib库计算文件和字符串的SHA256哈希值,提供实例演示及注意事项,包括分块读取大文件和编码字符串前的操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例子当然要简洁,废话当然要少说,这块主要以 sha256 为例来进行说明,当然你可以选择 sha512 、md5 等其他算法!

文件的 sha256

这里唯一要注意的一点:文件一定要以二进制的形式打开读取!

import hashlib

path = 'setup.py'
algorithm = hashlib.sha256()  # hashlib.sha512()  or hashlib.md5()
with open(path, 'rb') as f:
    algorithm.update(f.read())
print(algorithm.hexdigest(), path)

如果读取的文件比较大的话,可以尝试分片读取:

import hashlib
import os

path = 'setup.py'
algorithm = hashlib.sha256()
size = os.path.getsize(path)
with open(path, 'rb') as f:
    while size >= 1024 * 1024:
        algorithm.update(f.read(1024 * 1024))
        size -= 1024 * 1024
    algorithm.update(f.read())
print(algorithm.hexdigest(), path)
74765dc4880fe7759c0206e2bcfe30c8d3e8e305526434b4c62d6c6ed2141c12 setup.py

可以看到,结果和直接在 Linux 上使用 sha256sum命令(如果使用 sha512 或 md5 算法,在 Linux 请用 sha512sum 或 md5sum 生成哈希码)得到的结果一致: 

[root@master test]# sha256sum setup.py 
74765dc4880fe7759c0206e2bcfe30c8d3e8e305526434b4c62d6c6ed2141c12  setup.py

字符串的 sha256

这里唯一要注意的一点:字符串一定要先编码,即使是空字符串也不例外(和文件要以二进制形式读取的原因类似)!

import hashlib
text = 'hello world'
algorithm = hashlib.sha256()
algorithm.update(text.encode(encoding='UTF-8'))
print(algorithm.hexdigest(), text)
b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 hello world

不然的话会报错:

Traceback (most recent call last):
  File "D:/Projects/insight-tools-rest/test.py", line 4, in <module>
    algorithm.update(text)
TypeError: Unicode-objects must be encoded before hashing

校验的话就是多了一层比较哈希字符串的逻辑,这个我就不多啰嗦了!

Python中,生成随机盐并将其应用于SHA-256哈希用于密码安全。首先,你需要导入必要的库,如`hashlib`(处理哈希函数)和`secrets`(提供随机字符串)。以下是基本步骤: 1. 使用`secrets`模块创建一个随机字符串作为盐(salt),它通常是一个固定长度的字符串,例如8字节。 ```python import secrets random_salt = secrets.token_urlsafe(16) # 生成16字节的随机盐 ``` 2. 将用户输入的原始密码和盐一起传递给SHA-256哈希函数,这里使用`hashlib.sha256()`。 ```python def hash_password(password, salt): password_with_salt = password + salt hashed_password = hashlib.sha256(password_with_salt.encode()).hexdigest() return hashed_password ``` 3. 当用户注册时,生成新的哈希值;当登录请求时,先检查提供的密码(用户输入)与存储的哈希值是否匹配。由于你是将随机盐附加到原始密码上再计算哈希,所以需要将输入的密码和盐一起解密。 ```python # 假设你已经保存了加密后的哈希值和对应的盐 stored_hashed_password = 'your_stored_hashed_password' stored_salt = 'your_stored_salt' # 用户提交的密码 input_password = input("Enter your password: ") # 创建待比较的哈希值 input_password_with_salt = input_password + stored_salt input_hashed_password = hashlib.sha256(input_password_with_salt.encode()).hexdigest() # 验证 if input_hashed_password == stored_hashed_password: print("Password is correct.") else: print("Incorrect password.") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值