1. hash 函数

  • 关键词
    • 任意长度输入
    • 固定长度输出
  • 特征
    • 理论上输入跟输出并不是一对一
    • 实际使用假定不会出现碰撞或者冲突
  • 常用算法
    • (MD4 以前用,现在不大用了)
    • MD5
    • SHA-1
  • 应用场景
    • 数字签名
    • 文件校验

2. 哈希表

  • 是根据关键码值(Key, value)直接进行访问的数据结构
  • 常用算法
    • 直接寻址
    • 数字分析
    • 平方取中
    • 折叠法
    • 随机数
    • 除留余数法
  • 冲突处理
    • 链地址法
    • 建立公共溢出区
    • 再散列
    • 扩大“范围”
  • 性能
    • 散列函数是否均匀

3. 密码存储

  • 明文 vs 密文
    • 明文:可直接读懂含义
    • 密文:不可直接读懂
  • hash 密码
    • 防止密码泄露
    • 不能防备字典攻击
  • 加盐
    • 防备字典攻击
  • Python 代码示例
import hashlib


m = hashlib.md5()
m.update(bytes("password", "utf8"))  # 这里加盐更好
password = m.hexdigest()
print(password)

  • 后记

    • 此为之前听“刘大拿”老师的所谓能值 9999 的《数据结构与算法》的课时所记笔记

    • 等了很久都没有更新,不出意外是没后续了
    • 因为有一段时间了,所以整理笔记时重听了一部分,倒是有“温故而知新”的惊喜

02-10 17:04