Go和PHP中的SHA256给出了不同的结果

Go和PHP中的SHA256给出了不同的结果,php,go,sha,sha256,Php,Go,Sha,Sha256,我试图通过HTTP向服务器发送一个SHA256哈希字符串,在那里我想通过执行SHA256哈希并验证两个匹配来进行身份验证。出于测试目的,我使用相同的字符串,但是结果不匹配。这可能是我的base64_encode调用的默认编码方案吗?谢谢 在PHP中,我正在做: $sha = hash("sha256", $url, true); $sha = base64_encode(urlencode($sha)); 我在做什么 //convert string to byte slice convert

我试图通过HTTP向服务器发送一个SHA256哈希字符串,在那里我想通过执行SHA256哈希并验证两个匹配来进行身份验证。出于测试目的,我使用相同的字符串,但是结果不匹配。这可能是我的base64_encode调用的默认编码方案吗?谢谢

在PHP中,我正在做:

$sha = hash("sha256", $url, true);
$sha = base64_encode(urlencode($sha));
我在做什么

//convert string to byte slice
converted := []byte(to_hash)

//hash the byte slice and return the resulting string
hasher := sha256.New()
hasher.Write(converted)
return (base64.URLEncoding.EncodeToString(hasher.Sum(nil)))

过了一段时间我才明白。我将两者标准化为十六进制编码。为了实现这一点,我对代码进行了如下更改:

PHP:

去:


在开始处理这两个字符串之前,请确保它们完全相同。您可以在其中一种语言的末尾有一个隐藏字符(换行符、空格、制表符等),这将完全改变哈希值。请确保您使用的是相同的字符串编码。我在两侧使用“test”硬编码只是为了确保仍然不起作用。
$sha = hash("sha256", $url, false); //false is default and returns hex
//$sha = base64_encode(urlencode($sha)); //removed
//convert string to byte slice
converted := []byte(to_hash)

//hash the byte slice and return the resulting string
hasher := sha256.New()
hasher.Write(converted)
return (hex.EncodeToString(hasher.Sum(nil))) //changed to hex and removed URLEncoding