始终返回字母数字字符?

时间:2013-09-11 14:28:19

标签: php javascript hash md5 sha

我正试图理解这一点。例如,MD5或SHA1如何散列字符串并仅返回字母数字字符。我的意思是,如果我没有完全关闭,他们两个,或至少MD5,将字符串转换为二进制,然后附加任何缺少的东西,以便能够以512个字符为单位将其删除。然后它执行一系列操作,其中一个操作是对每个块的32个字中的一个进行异或。我的意思是,最终只能获得字母数字字符,这不是纯粹的运气,XOR必须产生别的东西吗?

有人可以向我解释,甚至提供一个小例子,其中有人XOR是java或php中的字符串吗?

2 个答案:

答案 0 :(得分:2)

通常,当向用户显示时,散列的输出显示为hexadecimal字符串,有时您可能还会看到Base64字符串,但这种情况更为罕见。

MD5哈希的输出是16字节(128位)值。单个字节可以具有的全部值可以显示为两位十六进制值。此十六进制值的范围可以是00到FF,十进制的值为0到255,或者更明显的是二进制00000000到11111111(一个字节中的八位)。

所以16个字节可以表示为32个十六进制数字而不会丢失任何信息,并且具有易于通过目视检查进行比较的优点。

编辑:

另一个混乱的来源可能是你的前提是哈希对字母数字数据起作用,这是不正确的。诸如MD5之类的散列不对字符串起作用,它们对任意数据进行操作。

散列字符串时,使用UTF-8等编码将其散列为数据。例如,UTF-8中hello的表示形式为二进制01101000 01100101 01101100 01101100 01101111或十六进制68 65 6C 6C 6F。该数字是哈希的实际输入。

答案 1 :(得分:0)

它们是字母数字,因为结果以十六进制形式显示。使其更易于可视化和比较。