2013-04-19 13 views
5

私はSHA256ハッシュを実行して2つの一致を確認することで、HTTP経由でSHA256ハッシュ文字列をサーバーに送信しようとしています。テスト目的のために私は同じ文字列を使用していますが、私の結果は一致しません。これは私のbase64_encode呼び出しのためのデフォルトのエンコーディングスキームでは何か?ありがとう。GoとPHPのSHA256が異なる結果を返す

私がやっている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))) 
+1

は、あなたがそれらの作業を開始する前に2つの文字列が全く同じであることを確認してください。あなたはハッシュ値を完全に変更する言語の1つの末尾に隠れた文字(改行、スペース、タブなど)を持つことができます。 –

+0

同じ文字列エンコーディングを使用していることを確認してください。 – SLaks

+0

私は両方の側でハードコードされた単語 "テスト"を使用して、確かに、まだ動作しません。 – user387049

答えて

6

をやっているが、私はしばらくそれを把握することができました。私は両方を16進符号化に標準化しました。これを実現するために、次のように私は、コードを変更:

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 
関連する問題