Я пытаюсь отправить хешированную строку SHA256 поверх HTTP на сервер, где я хочу выполнить аутентификацию, выполнив хэш 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