8

これは奇妙な質問ですが、私はこれに何時間も取り組んでおり、あまり進歩していません。ここの誰かがアドバイスできるかもしれないことを願っています...

スクリプトをphpからノードに移植しています。phpスクリプトはこの関数を利用します:

hash_hmac('sha512', $text, $key);

私は暗号モジュールを使用してノードでこれを再現しました:

var hash = crypto.createHmac( "sha512", key );
hash.update( text );
return hash.digest( "hex" );

同じテキストとキーを指定すると、これらの関数が同じハッシュを生成することを確認しました。

それ外...

phpのキーに使用されている文字列は次のようになります:(聞かないでください)

define("SITE_KEY", "
                                           __
     ,                                   ,' e`---o
    ((                                  (  | ___,'
     \\~-------------------------------' \_;/
     (                                     /
     /) ._______________________________.  )
    (( (                               (( ( 
     ``-'                               ``-'

");

私はこれを次のようにJavascriptで再現しようとしました:

var key = "\
                                           __\
     ,                                   ,' e`---o\
    ((                                  (  | ___,'\
     \\\\~-------------------------------' \\_;/\
     (                                     /\
     /) ._______________________________.  )\
    (( (                               (( ( \
     ``-'                               ``-'\
\
";

しかし、それは機能しません。(私はそれが改行と関係があると思います)。

次のように改行を「\r\n」または「\n」に置き換えても機能しません。

var key = "\r\n                                           __\r\n     ,                                   ,' e`---o\r\n    ((                                  (  | ___,'\r\n     \\\\~-------------------------------' \\_;/\r\n     (                                     /\r\n     /) ._______________________________.  )\r\n    (( (                               (( ( \r\n     ``-'                               ``-'\r\n\r\n";

これを修正する方法についての提案はありますか?(残念ながら、犬を追い払うことはできません。)

(事前に)あなたの助けに感謝します。

4

3 に答える 3

3

BASE64でエンコードされた文字列を保存してみませんか?そうすれば、改行や空白などについて心配する必要はありません。

PHPコードがキーを(明らかに)正しく保存していることを確認して、次のようなスクリプトを試してください。

<?
$doggy_key = ....;
echo base64_encode($doggy_key);

コマンドラインから実行し、エンコードされたキーをコピーして、JavaScriptで使用します。たとえば、base64文字列のデコードは単純な問題です。 クライアント側のJavascriptでのBase64エンコーディングとデコーディング

于 2013-03-14T06:49:23.950 に答える
1

私の知る限り、元の文字列には改行はありません。最後の円記号は、次の行が前の行の続きであることをPHPに通知します。私が正しいかどうかをテストするために、PHPに文字列を出力させて、文字列に改行が含まれているかどうかを確認することができます。しかし、これはJavascriptで1つの長い文字列または結合された文字列で記述できると思います。

于 2013-03-14T06:42:17.257 に答える
0

\nPHPバージョンのすべての改行をJSバージョンの(改行なしで)置き換えてみてください。それでも問題が解決しない場合は、すべてを次のように置き換えてみてください\r\n—PHPはWindows形式のソースで複数行のリテラルを変換しないに違いありません:)

于 2013-03-14T04:57:36.123 に答える