Questa è una domanda strana, ma ci sto lavorando da ore e non sto facendo molti progressi. Spero che qualcuno qui possa essere in grado di consigliare ...(Not-so) Il tasto Clever sta causando problemi con SHA512 Hmac nel nodo JS
Sto eseguendo il porting di uno script da php a node. Lo script PHP fa uso di questa funzione:
hash_hmac('sha512', $text, $key);
ho riprodotto questo nodo utilizzando il modulo crypto:
var hash = crypto.createHmac("sha512", key);
hash.update(text);
return hash.digest("hex");
Ho verificato che queste funzioni producono lo stesso hash quando dato lo stesso testo e chiave.
Tranne ...
La stringa che viene utilizzato per una chiave in php è simile a questo: (Non chiedere)
define("SITE_KEY", "
__
, ,' e`---o
(( ( | ___,'
\\~-------------------------------' \_;/
( /
/) ._______________________________. )
((( (((
``-' ``-'
");
ho cercato di riprodurre questo in Javascript come così:
var key = "\
__\
, ,' e`---o\
(( ( | ___,'\
\\\\~-------------------------------' \\_;/\
( /\
/) ._______________________________. )\
((( (((\
``-' ``-'\
\
";
Ma non funziona. (Presumo che deve avere qualcosa a che fare con le interruzioni di riga).
Sostituzione delle nuove righe con "\ r \ n" o "\ n", come in seguito anche non funziona:
var key = "\r\n __\r\n , ,' e`---o\r\n (( ( | ___,'\r\n \\\\~-------------------------------' \\_;/\r\n ( /\r\n /) ._______________________________. )\r\n ((( (((\r\n ``-' ``-'\r\n\r\n";
Suggerimenti su come risolvere questo problema? (Sbarazzarsi del cane non è un'opzione, purtroppo.)
Grazie (in anticipo) per il vostro aiuto.
Questa è la mia nuova domanda preferita su Stack Overflow. – Bill
La differenza tra la chiave reale e quella incollata che la chiave reale ha "long dog is long" è scritta nel mezzo? – hobbs
Come hai detto, la chiave non è * esattamente * la stessa ... ma i doppi battiti letterali sono diversi tra i due cani. In PHP il \\ vicino alla coda del cane viene interpretato come una letterale barra retroversa.L'orecchio vicino al cane viene interpretato come un letterale backslash e un trattino basso. Prova base64! :-) – MrTrick