NodeJS Crypto с RC4 дает пустой результат

У меня есть функция php, которая генерирует зашифрованную строку RC4. Я хотел бы декодировать эту строку с помощью Node — в идеале с помощью встроенного модуля Crypto. Но я не могу этого сделать - я просто получаю пустую строку.

Код 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.

Я на OSX 10.8, последний узел.

Я открыт для использования другого модуля для расшифровки - я попробовал модуль cryptojs, но не понял, как заставить его работать - выдал мне ошибки, когда я попробовал RC4.

Спасибо


person cyberwombat    schedule 24.10.2012    source источник


Ответы (1)


Догадаться

Сначала нужно использовать crypto.createDecipheriv, иначе ключ, как я полагаю, хэшируется md5, а не используется в необработанном виде.

Во-вторых, входная кодировка должна быть установлена ​​как двоичная.

В-третьих, в моем случае я имел дело с данными 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);
person cyberwombat    schedule 25.10.2012