单向散列函数(One-way hash function)

概念

  • 单向散列函数,又被称为消息摘要函数(message digest function),哈希函数

  • 输出的散列值,也被称为消息摘要(message digest)、指纹(fingerprint)

特点

  • 根据任意长度的消息,计算出固定长度的散列值

  • 散列值长度和消息长度无挂

    • 无论消息是1bit、10M、100G,单向散列函数都会计算出固定长度的散列值

      截屏2020-06-05上午12.23.18

  • 计算速度快,能快速计算出散列值

  • 消息不同,散列值也不同

    • 哪怕是 1bit的不同,散列值也会完全不同

      截屏2020-06-05上午12.24.19

  • 具备单向性

    截屏2020-06-05上午12.25.33

常用单向散列函数

  • 常见的几种单向散列函数
    • MD4、MD5

      • 产生128bit的散列值,MD就是Message Digest的缩写,目前已经不安全
      • Mac终端上默认可以使用md5命令
    • SHA-1

      • 产生160bit的散列值,目前已经不安全
    • SHA-2

      • SHA-256、SHA-384、SHA-512,散列值长度分别是256bit、384bit、512bit
    • SHA-3

      • 全新标准

应用

防止数据被篡改

  • 比如,你昨天编写了一个.md文档,今天再看时,如何防止数据被篡改呢?

    • 如果对比一遍所有.md文档的内容,内容多的话就会非常费劲
    • 这时,使用单向散列函数,对昨天的.md文档计算出一个散列值,再对今天的.md文档计算出一个散列值,只要对比两个散列值是否一致就可以确定文档是否被修改过。

    截屏2020-06-05上午12.33.13

  • 再比如,某些网站上,下载应用时,网站会给出这个应用的用某种单向散列函数计算出的散列值

    • 这时,如果我们没有在官网上下载应用,而是在某个镜像源网站上下载的应用
    • 当下载完应用后,我们使用同样的 单向散列函数 计算下载应用的散列值
    • 如果计算出的散列值 和 官网给出的散列值一致, 则为正版软件
    • 否则为盗版软件
    • 这时 单向散列函数 也起到了防止数据被篡改的作用

    截屏2020-06-05上午12.34.08

另一种应用 - 口令加密

  • 比如,某app的登录功能,需要用户输入账号,密码登录。

  • 这时,客户端如果直接传密码明文给服务器端,服务端来存储,就会非常不安全,

    • 可能在通信过程中被中间人攻击窃取密码
    • 也可能,服务器被黑客攻破时,导致大量用户账户密码泄露
  • 怎么会更安全呢?

    • 单向散列函数出马
    • 客户端在向服务端传送数据时,使用单向散列函数加密密码,传输密文
    • 服务端存储密文,当下次用户验证时,直接拿密文与服务器保存密文做对比就可以

截屏2020-06-05上午12.42.56

以上便是我们需要大致了解的关于单向散列函数的内容,我们离学习完成iOS签名机制的路上又近了一步。