2009-12-28 105 views
3

我只是想知道,是有一个原因一些图书馆(无论是任何语言)使用迭代散列使得散列数据以十六进制编码,再改头换面换汤不换药实际的二进制输出,而不是?迭代散列

回答

-1

这样做是为了引入一个额外的步骤,以防止该散列可能开始,如果它被迭代直接施加到相同的散列的结果以产生相同或相似的输出。这个额外的步骤与哈希实现无关,并且本身充当另一个不会受伤的重新哈希阶段。这种预防措施对于可靠的哈希来说不是必需的 - 但是,如果某些哈希算法存在未知缺陷,您将永远无法预知。

+0

等一下,你是说哈希算法不返回原始输出,返回某种“散列”输出?我认为这不是事实。 AFAIK,大多数库会将二进制数据转换为十六进制(编码),或者单独返回二进制数据。我没有理由在这里使用十六进制(基数为16)而非二进制(基数为2)。 – Tower 2009-12-28 13:35:34

+0

不,如果你有十六进制输出,你可以将它转换为原始的,反之亦然。事实上,散列的输出在重新散列之前会以某种方式进行转换,可以提高安全性。关键不在于转换本身,关键在于它在应用相同散列之前完成。 – sharptooth 2009-12-28 14:11:12

+0

当我想到这一遍又一遍,我看不到的方式映射0-255字节为0-15个字节(而不是实际的字节,只是数量)和老调重弹它可以提高安全性如何。据我所知,它应该是相反的。与散列实际输出相比,我们会通过再次对压缩输出进行散列来丢失熵。你能提供一些有关这方面的事实吗?或者它只是在重新调整之前压缩数据提高安全性的一种感觉? – Tower 2009-12-28 14:43:56