MySQL 加密密码通常指的是对数据库中的用户密码进行加密存储,以保护用户数据的安全性。MySQL 提供了多种加密方式,包括哈希函数(如 SHA-256)、加盐哈希(salted hash)等。
原因:明文存储密码存在极大的安全风险,一旦数据库被攻破,攻击者可以直接获取所有用户的密码。
解决方法:使用哈希函数对密码进行加密存储。即使数据库被攻破,攻击者也无法直接获取用户的明文密码。
原因:彩虹表是一种预先计算好的哈希值表,可以用来快速破解哈希密码。
解决方法:使用加盐哈希。在密码中添加随机生成的盐,然后再进行哈希,这样即使两个用户使用相同的密码,其哈希值也会不同,有效防止彩虹表攻击。
以下是一个使用 SHA-256 哈希函数和加盐哈希的示例代码:
import hashlib
import os
def hash_password(password):
# 生成随机盐
salt = os.urandom(16)
# 将密码和盐组合
salted_password = password.encode('utf-8') + salt
# 使用 SHA-256 进行哈希
hashed_password = hashlib.sha256(salted_password).hexdigest()
return hashed_password, salt.hex()
def verify_password(password, hashed_password, salt):
# 将盐从十六进制转换为二进制
salt = bytes.fromhex(salt)
# 将密码和盐组合
salted_password = password.encode('utf-8') + salt
# 使用 SHA-256 进行哈希
new_hashed_password = hashlib.sha256(salted_password).hexdigest()
return new_hashed_password == hashed_password
# 示例
password = "my_password"
hashed_password, salt = hash_password(password)
print(f"Hashed Password: {hashed_password}")
print(f"Salt: {salt}")
# 验证密码
is_valid = verify_password("my_password", hashed_password, salt)
print(f"Is Valid: {is_valid}")
领取专属 10元无门槛券
手把手带您无忧上云