1

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

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

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

以下のjavascript関数では、ステートメントpasswordから取得されます。json.parse(msg)次に、次のHMACメソッドを使用します。

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

それはのように見えますCrypto.HMAC(Crypto.SHA1,password,salt);

ありがとう。

4

1 に答える 1

1

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

于 2012-04-21T17:44:09.963 に答える