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 用一个长的或连接的字符串来写这个。

于 2013-03-14T06:42:17.257 回答
0

\n尝试用JS 版本中的(并且没有换行符)替换 PHP 版本中的所有换行符。如果这不起作用,请尝试将它们全部替换为\r\n- 我敢打赌 PHP 不会在 windows 格式的源代码中翻译多行文字:)

于 2013-03-14T04:57:36.123 回答