2012-10-24 108 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);