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

在PHP中,我正在做:

$sha = hash("sha256", $url, true);
$sha = base64_encode(urlencode($sha));

在Go中,我正在做
//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:

$sha = hash("sha256", $url, false); //false is default and returns hex
//$sha = base64_encode(urlencode($sha)); //removed

Go:
//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

关于php - Go和PHP中的SHA256提供不同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16111754/

10-11 23:55