所以我对PHP中的哈希函数有一个奇怪的小问题。这种情况只会偶尔发生,这让我很困惑。本质上,我有一个Java应用程序和一个PHP页面,它们都计算同一字符串的SHA256。两者之间没有任何问题,因为它们计算的哈希值(通常)相同。一个例外是,每隔一段时间,PHP的输出就会比Java的长一个字符。
我有以下PHP代码:
$token = $_GET["token"];
$token = hash("sha256", $token."<salt>");
echo "Your token is " . $token;
99%的时间,我得到了正确的散列。但每隔一段时间,我就会收到这样的东西(添加空格以显示差异):
26be60ec9a36f217df83834939cbefa33ac798776977c1970f6c38ba1cf92e92 # PHP
26be60ec9a36f217df83834939cbefa33ac798776977c197 f6c38ba1cf92e92 # Java
正如你所看到的,它们几乎完全相同。但由于某种原因,顶部的一个(由PHP计算)又多了一个0。我还没有真正注意到其中的押韵或原因,但这确实让我感到困惑。我试过思考错误的编码或错误的返回值等问题,但没有一个能真正解释为什么除了那一个字符之外,它们几乎完全相同。
如能在这个问题上提供任何帮助,我们将不胜感激。
编辑:空格只在底部,以突出显示多余的0所在的位置。实际的哈希没有空格,而且确实是一个有效的哈希,因为它与Java生成的哈希相同。
第二版:很抱歉。我用Notepad++检查了长度,由于它与我的普通文本编辑器不同,我将长度误读了1。所以,是的,上面的那个确实是对的。这意味着这是我的Java代码中的一个错误。我将探究伊格纳西奥的答案并回复你。