(Not-so)聪明钥匙导致Node JS中的SHA512 Hmac问题
这是一个古怪的问题,但我一直在这个工作几个小时,并没有取得很大的进展。 我希望这里有人能够build议…
我正在移植一个脚本从PHP到节点。 php脚本使用这个函数:
hash_hmac('sha512', $text, $key);
我已经在使用encryption模块的节点中再现了这一点:
var hash = crypto.createHmac( "sha512", key ); hash.update( text ); return hash.digest( "hex" );
我已经证实,当给定相同的文本和密钥时,这些函数产生相同的散列。
除…
在php中用于键的string看起来类似于:(不要问)
define("SITE_KEY", " __ , ,' e`---o (( ( | ___,' \\~-------------------------------' \_;/ ( / /) ._______________________________. ) (( ( (( ( ``-' ``-' ");
我试图在Javascript中重现这一点,就像这样:
var key = "\ __\ , ,' e`---o\ (( ( | ___,'\ \\\\~-------------------------------' \\_;/\ ( /\ /) ._______________________________. )\ (( ( (( ( \ ``-' ``-'\ \ ";
但它不起作用。 (我认为它必须与换行有关)。
用下面的“\ r \ n”或“\ n”replace换行符也不起作用:
var key = "\r\n __\r\n , ,' e`---o\r\n (( ( | ___,'\r\n \\\\~-------------------------------' \\_;/\r\n ( /\r\n /) ._______________________________. )\r\n (( ( (( ( \r\n ``-' ``-'\r\n\r\n";
如何解决这个问题的build议? (不幸的是,摆脱狗不是一种select。)
在此先感谢您的帮助。
为什么不存储stringBASE64编码? 这样你就不必担心换行符,空格,等等。
看到你的php代码正确地存储密钥(显然),请尝试一个脚本,如:
<? $doggy_key = ....; echo base64_encode($doggy_key);
从命令行运行它,复制编码密钥,然后在您的JavaScript中使用它。 例如,解码base64string是一个简单的问题; Base64编码和解码在客户端JavaScript
就我所知,原始string中没有换行符。 最后的反斜杠告诉PHP,下一行只是前一个的延续。 为了testing我是否正确,可以让PHP打印出string,看它是否有换行符。 但是我怀疑你可以用Javascript中的一个长string或连接string来写这个。
尝试在JS版本中用\n
(而不是换行符)replacePHP版本中的所有换行符。 如果这不起作用,请尝试用\r\n
replace它们 – 我敢打赌,PHP不会在Windows格式的源代码中翻译多行文字:)