摘要算法

摘要算法

起男 1,314 2021-04-07

摘要算法

又称哈希算法、hash、digest、数字指纹

  • 计算任意长度数据的摘要(固定长度)
  • 相同的输入数据始终得到相同的输出
  • 不同的输入数据尽可能得到不同的输出

目的

验证原始数据是否被篡改

java的Object.hashCode()方法就是一个摘要算法:

  • 输入:任意数据
  • 输出:固定长度数据(int类型)
  • 相同输入得到相同输出

碰撞

两个不同的输入得到了相同的输出

碰撞不能避免,因为输出的长度是固定的,但输入的长度是不固定的

安全性

一个好的hash算法应该:

  • 碰撞率低
  • 不能猜测输出
  • 输入的任意一个bit的变化会造成输出完全不同
  • 很难从输出反推输入(只能依靠穷举)

常见算法

算法输出长度
MD5128bits(16bytes)
SHA-1160bits(20bytes)
SHA-256256bits(32bytes)
RipeMD-160160bits(20bytes)