Php Base64+;sha256未给出预期结果

Php Base64+;sha256未给出预期结果,php,Php,我需要弄清楚为什么我得到了错误的结果,问题是: 预期结果 MU0FBJARVSNYDIIXNKQYLCQVUNTSQFCMnowGqSiWLiY2JH 当前结果 MZJLZDA1MDZMDYZMDEXNTZJMZCYMGYMYMYMGFHNTZLOWQZNDHMNDDA1MDHJWNLYZA2NDJMJE2OQ== 我正在使用的代码(php) 这个网站给了我一个更接近的结果 sha256($pass.$salt)=>mu0fbjarvsnydiixinkqylccqvuntspqfcmnowgq

我需要弄清楚为什么我得到了错误的结果,问题是:

预期结果

MU0FBJARVSNYDIIXNKQYLCQVUNTSQFCMnowGqSiWLiY2JH

当前结果

MZJLZDA1MDZMDYZMDEXNTZJMZCYMGYMYMYMGFHNTZLOWQZNDHMNDDA1MDHJWNLYZA2NDJMJE2OQ==

我正在使用的代码(php)

这个网站给了我一个更接近的结果

sha256($pass.$salt)=>mu0fbjarvsnydiixinkqylccqvuntspqfcmnowgqsiwk=

您可以在站点的结果字段附近找到[1],意思是“Base64中的哈希”

问题是。。。我甚至不能得到结果


编辑(谢谢Jon)

现在代码是这样的

echo base64_encode(hash("sha256", $pass.$salt', true));
我得到的结果和网站上的一样


现在的问题是这两个结果之间的差异

actual result   : Mu0FBjARVsNyDiixnKqyLCCqVunTSPQFCMnOwGQsIWk=
expected result : Mu0FBjARVsNyDiixnKqyLCCqVunTSPQFCMnOwGQsIWliY2Jh
默认情况下,返回其输出的十六进制编码字符串,而您希望它返回原始字节。幸运的是,它接受了第三个论点;将其设置为
true
,如下所示:

echo base64_encode(hash("sha256", $pass.$salt', true));

您期望的结果只有192位,因此它比SHA-256的输出可能更小。你的实际结果看起来完全可信。我希望你没有用它来存储密码。不要做新东西(,),坚持(如果可以的话)。我还没有开发这个系统,只是在使用它,但是文档很差(或者可能我没有足够的知识)。你的代码在
$pass.$salt'
中包含一个引号,请删除它。否则,它将抛出一个错误<代码>echo base64_编码(散列(“sha256”,$pass.$salt,true))或添加一个
“$pass.$salt”
——但我必须补充一点,有或没有这些引号,会产生不同的结果。salt是什么?“liY2Jh”?如果有人做了这件事,他们可能也在操纵结果。谢谢Jon让我更靠近了,现在我得到了与其他网站相同的结果。现在的问题是两个results@Manuel:您的预期结果是48个字符长,这意味着您编码了48*3/4=36字节。由于sha256的输出长度始终为32字节,因此无法相加。你在问题文本的某个地方犯了错误。你从哪里得到了预期的结果?您在计算过程中又涉及了4个字节的数据,但我不知道它们来自何处。这是登录到Web服务后获得的令牌。我想,如果sha256长码添加了一些东西,那就不是问题了。我不知道还有4个字节是从哪里来的,可能是$salt实际上有4个字符长,我认为这是一件愚蠢的事情。注释中的4个字符与4有关bytes@Fred-ii-:这段引用是一个明显的错误,但是代码不能用它编译,所以我完全忽略了它(OP的代码似乎可以编译)。应该删除它,因为添加另一个单引号不会替换变量的值。
echo base64_encode(hash("sha256", $pass.$salt', true));