2012-10-24 15 views
5

Possiedo una funzione PHP che genera una stringa crittografata RC4. Vorrei decodificare quella stringa usando Node - idealmente usando il modulo Crypto integrato. Ma non sono in grado di farlo - ottengo solo una stringa vuota.NodeJS Crypto con RC4 restituisce un valore vuoto

Il codice PHP è qui http://code.google.com/p/rc4crypt/

Il mio codice JS è

crypto = require('crypto'); 
decipher = crypto.createDecipher("rc4", "MY SECRET KEY"); 
text = "HELLO"; 
decrypted = decipher.update(text, "utf8", "hex"); 
decrypted += decipher.final("hex"); 
console.log(decrypted); 

non ottengo alcun output. Ho controllato che la mia implementazione OpenSSL ha RC4 usando openssl list-message-digest-algorithms

Sono su OSX 10.8, ultimo nodo.

Sono aperto all'utilizzo di un altro modulo per decrittografare - Ho provato il modulo cryptojs ma non ho capito come farlo funzionare - mi ha dato errori quando ho provato RC4.

Grazie

risposta

4

capito

In primo luogo si deve usare crypto.createDecipheriv altrimenti la chiave è - credo - MD5 hash invece utilizzato a crudo.

In secondo luogo, la codifica di ingresso mut deve essere impostata su binario.

Terzo - nel mio caso avevo a che fare con i dati POST invece che una stringa hardcoded e ho dovuto urldecode esso - decodeURIComponent() sono finite soffocato - ma unescape(), con la rimozione di segni + ha fatto il trucco es:

var text = unescape((response.post.myvar + '').replace(/\+/g, '%20')) 

var crypto = require('crypto'); 
decipher = crypto.createDecipheriv("rc4", key, '');  
decrypted = decipher.update(text, "binary", "utf8"); 
decrypted += decipher.final("utf8"); 
console.log(decrypted); 
Problemi correlati