MD5哈希转换

欣快感

我要了解的基础是MD5哈希函数如何将任意长度的字符串转换为这么小的长度,但仍然表示整个字符串。

我知道它将转换为由16个十六进制值组成的128位输出,但是据我了解,在我看来,单个十六进制值仅代表一个值。例如:在我看来,相对于c ++的ASCII表为0x41为'A'。

显然,我对MD5函数的理解以及输出如何容纳信息是有缺陷的,因此,我正在寻找一种解释,以了解这些十六进制如何精确地容纳这么大的字符串。

塔德曼

您正在将哈希函数压缩算法混淆

散列通常是单向操作,一旦被散列,就无法“取消散列”。没关系,因为这不是哈希的用途。

哈希函数通常用于将任意长度的内容表示为一致的长度值。例如,SHA2-256将任意数量的二进制数据表示为256位值。它的设计使输入中即使只有一点点更改都将导致整个哈希值发生变化,从而使反向哈希处理和“猜测”输入变得十分困难,甚至并非不可能。

这并不是说哈希没有缺陷。著名的MD5是如此之弱,以至于构造两个散列为相同值的二进制字符串,从而产生散列冲突并不难好的哈希算法使这种情况不太可能发生,但是没有哈希算法可以使之不可能。

事物哈希用于:

  • 提供某种“摘要”以检测篡改,例如您下载的事物的加密签名。
  • 像在散列表或字典中那样,跨数据结构“随机”分布数据以避免聚集。
  • 存储不容易逆转的数据,例如密码。好的密码哈希很难被暴力破解,但是相当容易针对候选密码进行测试。

基本上,可以创建给定MD5哈希的二进制文件数量是无限的。对于无损压缩算法,情况并非如此,因为按设计进行的压缩表示仅代表一个源文档。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章