散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数组【指纹】的方法。和指纹一样,散列算法就是一种以较短的信息来保证文件的唯一性的标志,这种标志与文件的每一个字节都相关, 而且难以找到逆向规律。
哈希函数是密码学中的一个重要的函数,一般以Hash(·)表示。哈希函数将任意一段数据(通常称这段数据为message‘消息’)转换为固定长度的字符串(一般称输出的字符串为digest‘摘要’)。 Hash函数需要满足下述条件:
1、确定性:哈希函数的算法是确定性算法,算法执行过程中不引入任何随机量。这意味着相同消息的哈希结果一定相同。
2、高效性:给定任意一个消息m,可以快速计算Hash(m)。
3、目标抗碰撞性:给定任意一个消息m0,很难找到另一个消息m1,使得Hash(m0) = Hasn(m1)。
4、广义抗碰撞性:很难找到两个消息m0 != m1,使得Hash(m0) = Hasn(m1)。
在密码学上,一般认为如果第4个条件不满足,那么此哈希函数就不再安全。
目前流行的Hash算法包括MD5、SHA1和SHA2(MD5和SHA1都已被证明不具备‘强抗碰撞性’,推荐使用SHA2,如SHA-256、SHA-512)