散列函数

散列函数又称散列算法、哈希函数,是一种从任何一种数据中创建小的数字“指纹”的方法。散列函数把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定下来。该函数将数据打乱混合,重新创建一个叫做散列值的指纹。散列值通常用一个短的随机字母和数字组成的字符来代表。

如今,散列算法也被用来加密存在数据库的密码字符串,由于散列算法所计算出来的散列值具有不可逆(无法逆向演算回原本的数值)的性质,因此可以有效的保护密码。

性质

所有散列函数都有如下一个基本特性

  • 如果两个散列值不相同(根据同一函数),那么这两个散列值的原始值也是不相同的。但另一方面,散列函数的输入和输出不是唯一的对应关系,如果两个散列值相同,两个输入值很可能是相同的,但也可能不同,这种情况称为“散列碰撞”,这通常是两个不同长度的输入值,刻意计算出相同的输出值(又或者是因为散列值的长度有限,输入值的范围超出了散列值某一长度可容纳的范围)

应用

由于散列函数的应用的多样性,它们经常是专为某一应用而设计 的。例如,加密散列函数可以用来加密密码,一个设计优秀的加密散列函数是一个“单向”操作,对于给定的散列值,没有实用的方法可以计算出原始输入值,也就是说很难伪造。像SHA-2就被广泛用做检验散列函数,下载文件时,会对照对方提供的散列值对下载后的文件进行计算对比。此散列值不会因为环境因素的变化,如果机器配置或IP地址的改变而变动。以保证源文件的安全性(不会被中途篡改,篡改文件内容后计算出来的散列值就会改变)

主要有以下几个特点:

  • 保护资料

  • 确保传递真实的信息

  • 散列表

  • 错误校正

最后更新于