2012-10-24 10 views
5

Mam funkcję php, która generuje zaszyfrowany ciąg RC4. Chciałbym dekodować ten ciąg za pomocą Node - najlepiej przy użyciu wbudowanego modułu Crypto. Ale nie jestem w stanie tego zrobić - po prostu otrzymuję pusty ciąg znaków.NodeJS Crypto z RC4 daje puste

Kod PHP jest tutaj http://code.google.com/p/rc4crypt/

Mój kod JS jest

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

nie dostać żadnych wyników. Sprawdziłem, że moja implementacja OpenSSL ma RC4 używając opensl list-message-digest-algorithms

Jestem na ostatnim węźle OSX 10.8.

Jestem otwarty na używanie innego modułu do odszyfrowania - próbowałem modułu cryptojs, ale nie wiedziałem, jak to zrobić - dało mi błędy, gdy próbowałem RC4.

Dzięki

Odpowiedz

4

Zdobione

Najpierw trzeba użyć crypto.createDecipheriv inaczej kluczem jest - wierzę - zakodowane md5 zamiast stosować surowe.

Po drugie kodowanie wejściowe mut ustawiane jest na binarne.

trzecie - w moim przypadku miałem do czynienia z danymi POST zamiast zakodowanego na stałe ciągu i musiałem go urldecode - decodeURIComponent() jsut zakrztusił - ale unescape() z usuwaniem + znaki załatwiło sprawę ex:

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