2012-04-21 9 views
1

JavaScriptとPHPの両方でHMACを使用し、両方の関数のパラメータを変数として両方のporgamsを実行すると、HMACの2つの異なる値を取得します。しかし、文字列リテラルとしてそれらを実行すると、すべて正常に動作します。私は文字列変数がどのように各言語でエンコードされているかと関係があると思いますが、それを修正する方法はわかりません。私が使用しているコードは以下の通りです。JavascriptとPHPとのハッシュ値が異なる

以下のphp関数では、$pwd1がコマンドラインから取得されます。 javascript関数以下で

$k = hash_hmac('sha1', $pwd1, $salt);

は、 passwordjson.parse(msg)の文から得ています。それから私は、 Crypto.HMAC(Crypto.SHA1,password,salt);のように見えます

<script type="text/javascript" src="http://crypto-js.googlecode.com/files/2.5.3-crypto-sha1-hmac.js"></script> 

から次のHMAC方式を使用します。

ありがとうございました。

+0

'json.parse(msg)'の出力をコンソールに記録しようとしましたか? (そして、あなたがブラウザにいるなら、これは 'JSON.parse(msg)'ではないでしょうか?) – nrabinowitz

答えて

1

答えが見つかりました。 PHPとJavascriptのストア文字列には違いがあります。私がやっていたようにPHPをコマンドラインから実行すると、文字列とキャリッジリターン(変数の入力に使用される)が格納され、文字列がキャリッジリターンを格納しないJavascriptより長くなります。したがって、Javascript文字列とPHP文字列をとにかく比較したい、またはハッシュしたい場合は、PHPのキャリッジリターンを考慮して、PHP変数の部分文字列を0から-1(-1は長さ-1)にする必要があります。

+1

'echo foo | php myscript.php' ...その場合、 'echo'で '-n'スイッチを使うことができます –

+0

私はコマンドラインからphpスクリプトを実行していたので、情報を入力すると、情報を読む部分もキャリッジリターン。私はPHPスクリプトが保存したものを書いたときに、私が印刷した情報と復帰 – tpar44