哈希函数的输出结果为什么长度是固定的?

SHA256可以把任意输入的字符串经过计算输出HASH,且输出结果长度固定,但是输入的结果却可以是任意长度(一个单词到一大段)。这是什么原因?
关注者
14
被浏览
32,555

9 个回答

仅抛砖引玉。

其实很多cryptographer更希望要一个只要改变配置就能把任意对象 映射 到想要的、有限大小的集合里的元素的hash。长度固定只是一个表象,重点在于映射到一个 有限 集合里,方便做下一步操作。

比如ECDSA和Schnorr签名要求先把待签名消息映射到和群阶数相关的整数群里,而BLS要求映射到一个EC点群里。而用在PSI的cockoo hash则需要把元素映射到某个位置范围里。集合有限,所以可以用有限长度表示。

话说我还记得这种压缩函数(compression function)或者摘要函数(message digest function)一开始是因为这种从无限到有限的性质, 和做存储位置映射的hash类似,才被一起都叫hash。不是因为叫hash所以有限。

hash算法就是这么做的呗,输出长度一样有很多好处啊,便于记录、传输啥的。hash就是把输入数据经过一通复杂的处理后得到一个固定长度的乱码输出。

输入是任意长度,输出长度固定,显然输入与输出不可能一一映射,必然会出现两个不同的输入映射到同一个输出,称为hash碰撞,输入空间越大,hash碰撞概率也更大。但是由于输出空间本身也很大,而且hash算法处理过程复杂,找到两个不同的输入映射到同一个输出还是比较困难的,这是hash安全性的保证。所以hash算法虽然不是一一映射,但仍具有实用价值。