我正在尝试通过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
走:
//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