2012-10-24 27 views
5

Tôi có một hàm php tạo chuỗi mã hóa RC4. Tôi muốn giải mã chuỗi đó bằng cách sử dụng Node - lý tưởng bằng cách sử dụng mô-đun Crypto dựng sẵn. Nhưng tôi không thể làm như vậy - tôi chỉ nhận được một chuỗi trắng.Mật mã NodeJS với hiệu suất RC4 trống

Mã PHP là đây http://code.google.com/p/rc4crypt/

mã JS của tôi là

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

tôi không nhận được bất kỳ đầu ra. Tôi đã kiểm tra xem triển khai OpenSSL của tôi có RC4 bằng cách sử dụng openssl list-message-digest-algorithms

Tôi đang sử dụng OSX 10.8, nút mới nhất.

Tôi mở để sử dụng mô-đun khác để giải mã - Tôi đã thử mô-đun mã hóa nhưng không tìm ra cách làm cho nó hoạt động - đã cho tôi lỗi khi tôi thử RC4.

Cảm ơn

Trả lời

4

đặn nó ra

Đầu tiên phải sử dụng crypto.createDecipheriv nếu không thì quan trọng là - tôi tin - md5 băm thay vì sử dụng nguyên liệu.

Thứ hai, mã hóa đầu vào được đặt thành nhị phân.

Thứ ba - trong trường hợp của tôi, tôi đã làm việc với dữ liệu POST thay vì một chuỗi mã hóa cứng và tôi đã phải urldecode nó - decodeURIComponent() jsut nghẹn ngào - nhưng unescape() với việc loại bỏ các dấu hiệu + đã làm các trick ví dụ:

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