使用 Python 和 SHA256 实现密码哈希存储的示例代码

2023-03-28 00:00:00 代码 示例 密码

在 Python 中,可以使用 hashlib 模块和随机盐值对密码进行哈希存储。下面是一个示例代码,使用 SHA256 对密码进行哈希存储:

import hashlib
import os

# 密码明文
password = "password123"

# 生成随机盐值,长度为 16 个字节
salt = os.urandom(16)

# 将密码和盐值合并成新的字节流
password_bytes = password.encode('utf-8')
data = salt + password_bytes

# 创建 SHA256 对象,计算哈希值
sha256 = hashlib.sha256()
sha256.update(data)
hash_value = sha256.digest()

# 将盐值和哈希值合并成新的字节流,存储到数据库中
stored_data = salt + hash_value

# 输出存储的数据
print(stored_data.hex())

以上代码会生成一个随机盐值,将密码和盐值合并成新的字节流,计算 SHA256 哈希值,并将盐值和哈希值合并成新的字节流,最后将该字节流存储到数据库中。如果要存储其他密码的哈希值,只需将上面示例代码中的 password 变量修改为要哈希的密码即可。

在验证密码时,需要从数据库中读取存储的盐值和哈希值,将输入的密码与盐值合并后重新计算哈希值,并与存储的哈希值进行比较。验证密码的示例代码如下:

import hashlib

# 输入的密码明文
password = "password123"

# 从数据库中读取存储的盐值和哈希值
stored_data = bytes.fromhex("...")  # 替换为实际的存储数据
salt = stored_data[:16]
hash_value = stored_data[16:]

# 将输入的密码和盐值合并成新的字节流,重新计算哈希值
password_bytes = password.encode('utf-8')
data = salt + password_bytes
sha256 = hashlib.sha256()
sha256.update(data)
new_hash_value = sha256.digest()

# 将新计算的哈希值与存储的哈希值进行比较,判断密码是否正确
is_valid = new_hash_value == hash_value

# 输出验证结果
print(is_valid)

以上代码会从数据库中读取存储的盐值和哈希值,将输入的密码和盐值合并成新的字节流,重新计算 SHA256 哈希值,并与存储的哈希值进行比较,判断密码是否正确。如果要验证其他密码,只需将上面示例代码中的 password 和 stored_data 变量修改为要验证的密码和存储的数据即可。

相关文章