2013-04-19 22 views
5

Próbuję wysłać SHA256 zaszyfrowany ciąg przez HTTP do serwera, gdzie chcę uwierzytelnić poprzez wykonanie skrótu SHA256 i weryfikację dwóch dopasowań. Do celów testowych używam tego samego ciągu znaków, jednak moje wyniki nie pasują do siebie. Czy to może być coś z domyślnymi schematami kodowania dla moich wywołań base64_encode? Dzięki.SHA256 w Go i PHP daje różne wyniki

W PHP robię:

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

A idź robię

//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))) 
+1

upewnić oba łańcuchy są absolutnie identyczne przed rozpoczęciem pracy nad nimi. możesz mieć ukryty znak (linebreak, space, tab, etc ...) na końcu w jednym z języków, który całkowicie zmieni wartość hash. –

+0

Upewnij się, że używasz tego samego kodowania ciągów znaków. – SLaks

+0

Używam słowa "test" na stałe po obu stronach, aby się upewnić, że nadal nie działa. – user387049

Odpowiedz

6

udało mi się ustalić to po pewnym czasie. Standaryzowałem zarówno kodowanie szesnastkowe. Aby to osiągnąć Zmieniłem kod w następujący sposób:

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