番外篇·下:仙界游历

第四十六章:天机封印 (Hashlib)

← 上一章 | 返回宗门地图
路人
Py
师姐,我把藏经阁的密码直接写在玉简里,
结果被隔壁宗门的黑客给偷看了!
有没有一种法术,能把信息 封印 起来,除了我谁也看不懂?
神仙
姐姐
你需要的是 天机封印 (Hash)
这是一种 不可逆 的法术,它能把任意长度的信息,
压缩成一段固定长度的乱码 (摘要)。
就算黑客拿到了乱码,也绝对无法还原出原始信息!

1. 施展封印 (MD5)

最常见的封印术,虽然年代久远,但依然好用。

注意:封印术只接受 字节 (bytes),所以字符串要先 encode

import hashlib

text = "MySecretPassword123"

# 1. 创建封印阵法
m = hashlib.md5()

# 2. 注入灵力 (更新数据)
m.update(text.encode('utf-8'))

# 3. 封印完成 (获取十六进制摘要)
seal = m.hexdigest()
print(seal)
# 输出: 6c7ca345f63f835cb353ff15bd6c5e05

2. 更强的封印 (SHA-256)

MD5 已经被证实有瑕疵 (碰撞攻击),现在真仙都用 SHA-256。

s = hashlib.sha256()
s.update(b"Hello World")
print(s.hexdigest())
# 输出一长串: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146e

3. 验明正身 (Verification)

封印术虽然不可逆,但我们可以通过 比对封印 来验证身份。

用户登录时,我们将他输入的密码再次封印,如果和数据库里存的封印一样,就是本人!

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 中,用于向哈希对象添加数据的方法叫什么?

封印阵法已开启...
>>>
下一章:炼金之术 →