2010-12-30 11 views
1

こんにちは 私は、文字列をハッシュするためにJavaScriptでクラスを使用しています: https://ssl.bsk.com.pl/mobi/js/sha1.jsSHA1 hmac PHP対Javascript - 異なる結果?

hex_hmac_sha1("927545161", "asdasdasdasdś") ; 

結果は次のとおりです。私はハッシングてるPHPで 5db0194c834d419fc5d68b72c88af1ac8ee749d6

echo hash_hmac('sha1', "asdasdasdasdś", '927545161'); 

が、結果は次のとおりです。 0b115775a20bed9922b6a9cc934cb5328fe71ade

エラーはどこですか? 5db0194c834d419fc5d68b72c88af1ac8ee749d6!= 0b115775a20bed9922b6a9cc934cb5328fe71ade

+0

そうでなければなりません。 – BoltClock

+0

私はファイルエンコード/ユニコードの問題と関係があると思います。 – Bastian

+0

私は知っています。私はPHPとJSページでUTF-8を使用しています。問題はUTF-8文字です:> 5db0194c834d419fc5d68b72c88af1ac8ee749d6 – bordeux

答えて

5

PHPは、8ビットの文字のシーケンスとしてUTF-8文字列を解釈します。一方、Javascriptでは、各文字はUnicodeコードポイントに解決できます。

コンパクトで完全に読めないJavascriptの実装では、.charCodeAt()を使用して文字列を16進文字列に変換します。私はそれを完全に調べるのは気にしませんでしたが、"ś".charCodeAt(0)は単に347に解決され、残りの変換では8ビットの範囲の値が0から255になると予想していました。

+0

そうです。これは 'hex_hmac_sha1(" 927545161 "、" asdasdasdasd \ xC5 \ x9B ")==" 0b115775a20bed9922b6a9cc934cb5328fe71ade "で動作します。 – Gumbo

+0

JS scruotは他のサーバー上にあるので変更できません。私にはPHP側でログオンする必要があります - このログインセキュリティがありますPHPにはいくつかの解決策がありますか? – bordeux

関連する問題