最常见的封印术,虽然年代久远,但依然好用。
注意:封印术只接受 字节 (bytes),所以字符串要先 encode。
import hashlib
text = "MySecretPassword123"
# 1. 创建封印阵法
m = hashlib.md5()
# 2. 注入灵力 (更新数据)
m.update(text.encode('utf-8'))
# 3. 封印完成 (获取十六进制摘要)
seal = m.hexdigest()
print(seal)
# 输出: 6c7ca345f63f835cb353ff15bd6c5e05
MD5 已经被证实有瑕疵 (碰撞攻击),现在真仙都用 SHA-256。
s = hashlib.sha256()
s.update(b"Hello World")
print(s.hexdigest())
# 输出一长串: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e
封印术虽然不可逆,但我们可以通过 比对封印 来验证身份。
用户登录时,我们将他输入的密码再次封印,如果和数据库里存的封印一样,就是本人!
db_password_hash = "6c7ca345f63f835cb353ff15bd6c5e05"
input_password = "MySecretPassword123"
input_hash = hashlib.md5(input_password.encode('utf-8')).hexdigest()
if input_hash == db_password_hash:
print("✅ 身份确认,准予进入!")
else:
print("❌ 妖孽,竟敢冒充本座!")
为了防止黑客用 "彩虹表" 暴力破解,我们通常会在密码里加一点 "佐料" (Salt)。
任务:在 hashlib 中,用于向哈希对象添加数据的方法叫什么?