← 返回 Day 147 正文

Day 147 · 练习与清单

Day 147 练习与检查表 — 密码学基础

✅ 完成清单

📝 练习题

基础

1. 实现一个 sha256_tree 函数:给定任意目录,返回一个形如 {"相对路径": "sha256十六进制"} 的字典(提示:os.walk + 分块读取)。

2. 修改 02-password-hashing.py:把迭代次数从 100_000 提升到 600_000, 用 time.perf_counter 对比两次校验耗时,并回答:这对正常登录用户和 暴力破解者分别意味着什么?

进阶

3. 实现防篡改配置文件:写一对函数 save_config(cfg: dict, path: str, key: bytes) / load_config(path: str, key: bytes) -> dict | None。 要求:保存时把 JSON + HMAC 签名一起写入;加载时先验签,失败返回 None; 测试篡改文件中任意一个字符后 load 返回 None。

4. 说明并验证长度扩展攻击的存在:阅读 hashlib 文档,解释为什么 hashlib.sha256(key + msg).hexdigest() 不能当 MAC 用(画出 Merkle–Damgård 结构中的中间状态转移即可,不要求实现攻击)。再用 hmac.new(key, msg, hashlib.sha256) 写一个对照示例说明 HMAC 免疫此攻击。

挑战

5. 给 03 工具加"并行哈希":用 concurrent.futures.ThreadPoolExecutor 对目录中多个文件并行计算 SHA-256(哈希是 CPU 密集,可尝试 ProcessPoolExecutor 对比谁更快),并思考:单个大文件能否并行计算哈希?为什么?(从链式结构角度回答)