hash算法


介绍

hash算法,是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值,hash值。

hash算法准确的说是一种思想,是算法分类。MD4、MD5、SH1等具有hash算法的特征。

1、输出长度固定

不论输入长度是多少,输出为固定比特或者说字节的数据。

2、多对一

输入无穷可能,输出有限可能,因此存在必然的现象,即不同输入通过hash算法得到相同的值。

可以推出:

(1)hash值相同,原数据可能相同,可能不同。当然,相同数据的hash必然相同
(2)hash无法准确逆推

作用

验证数据的完整性

比如网站提供文件下载功能,一般会提供hash算法和官方对文件计算的hash值。
用户下载后,可以自行通过hash算法对文件计算,与官方的结果核对,保证下载文件与官方文件的一致性。
从而避免下载不完全,或者中间人等技术篡改文件。

排序和快速查找

如果是大批量的,大文本的数据集合,想要快速的查找是否存在某个数据,以及对某个数据进行删除、更新,按照文本序列是非常麻烦和迟缓的。

一种优化思想是对各文本进行hash算法,进一步的可以对hash值排序,查找某数据,可以将该数据计算hash值,然后依次进行查找,如果要进行删除或更新操作,取出匹配到的hash值的隐射文本。

hash破解

1、获取hash算法

两种思路,一是输入数据,然后观察输出是否为已知常用hash算法结果。
二是通过常用的hash算法思路,比如辗转相除法和地址空间,是否可以得到算法过程。

2、获取hash原文

前面提到由于hash算法的特性,无法准确根据hash值逆推原文。

但是在固定语境下,输入具有很强的相似性和关联性,比如设置密码。

预先收集和计算弱密码的原文和hash值,假设获取到密码的hash值,通过查表的方式获取密码原文,再进行下一步测试。

相关