使用 Python 和 SHA256 实现密码哈希存储的示例代码
在 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 变量修改为要验证的密码和存储的数据即可。
相关文章