2012-10-24 64 views
5

我有一个PHP函数,生成一个RC4加密字符串。我想使用Node解码该字符串 - 理想情况下使用内置的Crypto模块。但我无法这样做 - 我只是得到一个空白的字符串。NodeJS与RC4加密产生空白

的PHP代码是在这里http://code.google.com/p/rc4crypt/

我的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); 

我没有得到任何输出。我已经检查过,我的OpenSSL实现有RC4使用openssl list-message-digest-algorithms

我在OSX 10.8上,最新的节点。

我打开使用另一个模块解密 - 我试过cryptojs模块,但没有弄清楚如何使它工作 - 当我尝试RC4时给了我错误。

感谢

回答

4

想通了

首先,你必须使用crypto.createDecipheriv否则关键是 - 我相信 - MD5哈希,而不是用来生吃。

其次输入编码mut设置为二进制。

三 - 在我的情况下,我正在处理POST数据,而不是硬编码字符串,我不得不urldecode它 - decodeURIComponent()仅仅指刚哽咽 - UNESCAPE(),但去除+标志的伎俩例如:

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);