php - 总是返回字母数字字符?

标签 php javascript hash md5 sha

我费了好大劲才弄明白这一点。例如,MD5 或 SHA1 如何对字符串进行哈希处理并仅返回字母数字字符。我的意思是,如果我没有完全放弃,他们都或至少 MD5 将字符串转换为二进制,然后附加任何丢失的内容,以便能够将其分成 512 个字符的 block 。然后它进行一系列操作,其中之一是对每个 block 的 32 个单词中的一个进行 XOR。我的意思是,最后只得到字母数字字符不可能是纯粹的运气,XOR 必须产生其他东西吗?

有人可以向我解释一下,甚至可以提供一个小例子,说明某人对 java 或 php 中的字符串进行异或吗?

最佳答案

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

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

所以16个字节可以表示为32个十六进制数字,不会丢失任何信息,而且具有便于目测比较的优点。

编辑:

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

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

关于php - 总是返回字母数字字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18743953/

相关文章:

php - MySQL使用多个条件在单个查询中批量查询更新

javascript - 在 Chrome 18 中检测 SwiftShader WebGL 渲染器

java - MD5 哈希对于大字符串失败

php - 如何使用 PHP 在 MySql 中识别具有所有唯一字段值的行?

php - 使用 Laravel 一次插入多条记录

php - 如何使用 PHP 发送 POST 请求?

powershell - 比较文件哈希并输出文件

javascript - $.getJSON 没有做任何事情

javascript - 在 JavaScript 中转义单引号

java - 我如何生成字符串的长散列?