为什么md5和sha- *只在哈希结果中使用字母数字字符?

时间:2012-06-11 14:02:53

标签: hash ascii sha md5sum

我理解不想使用'\ 0',但扩展ASCII范围内的其余部分都可用吗?

这不会提供更好/安全/“更少合作”的哈希吗?

4 个答案:

答案 0 :(得分:3)

你从错误的前提开始 - 它们产生的结果可以(确实)包括从0到255的所有8位值。例如,SHA-256的一个测试向量是“的输入” ABC”。这个结果(十六进制)是:

ba7816bf 8f01cfea 414140de 5dae2223 b00361a3 96177a9c b410ff61 f20015ad

在该测试中,结果包括值为0x03到0xff的字节。

对于显示,可能(通常是)以十六进制的形式呈现。对于在电子邮件中的传输,它们通常用MIME或UUENCODE编码。然而,哈希本身并不局限于此。

以这种方式转换结果对碰撞阻力没有影响 - 你仍然有160/256 /任何实际数据位,但表示被扩展。

答案 1 :(得分:0)

结果只是十六进制编码,以便更好地阅读。

答案 2 :(得分:0)

实际上,那些哈希算法输出的是数字,而不是字符串。它们只使用字母a-f和数字0-9,这使输出成为十六进制数。

答案 3 :(得分:0)

MD5产生128位散列。 (16字节) sha,取决于sha1或sha256是产生160位(20字节)还是256位(32字节)散列。 请注意,我在谈论二进制长度/强度。发生碰撞的可能性越小。

大多数用户将其粘贴到数据库字段中的事实或者使用varions binary-ascii conversion algos将其转换为ASCII很方便。这不应该影响碰撞概率的强度,因为你最终会得到一个更大的ASCII字符串。

FWIW我已经在二进制形式的加密产品中使用SHA1,SHA256超过5年了,我建议按照以下顺序选择哈希,从最强到最弱:SHA256,SHA1,MD5。有一个网站可以“反转”MD5,所以我强烈反对它。