Skip to content

Instantly share code, notes, and snippets.

@arrayadd
Last active June 5, 2017 16:23
Show Gist options
  • Save arrayadd/3cbefa36ea8fec3aaa73cb262428be26 to your computer and use it in GitHub Desktop.
Save arrayadd/3cbefa36ea8fec3aaa73cb262428be26 to your computer and use it in GitHub Desktop.
到底什么是哈希Hash(2)

在上一篇文章中试着搞清楚到底什么是哈希,这一篇就再接着看看,什么是哈希函数,以及它有什么特点。


哈希函数、算法

一听到「函数,算法」反正我是觉得瞬间胆怯,惧怕,充满了敬畏,就像一个虔诚的穆斯林走向麦加时的心情。

哈希算法将任意长度的二进制值映射为较短的固定长度的二进制值,这个小的二进制值称为哈希值。哈希值是一段数据唯一且极其紧凑的数值表示形式。如果散列一段明文而且哪怕只更改该段落的一个字母,随后的哈希都将产生不同的值。要找到散列为同一个值的两个不同的输入,在计算上是不可能的,所以数据的哈希值可以检验数据的完整性。一般用于快速查找和加密算法 ---《数据结构与算法分析》

搞不清上面文字了,看下面这个图:


特点

  • 如果两个哈希值是不相同的(根据同一函数),那么这两个散列值的原始输入一定是不相同的。例如图中,如果A1!=B1 ,那么A一定不等于B.
  • 如果两个哈希值相同,两个输入值很可能(极大概率)是相同的,但也可能不同,这种情况称为“哈希碰撞”
  • 抗篡改能力:对于一个数据块,哪怕只改动其一个比特位,其hash值的改动也会非常大。
  • 它是一种单向函数是“非对称”的,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment