2012-10-24 15 views
5

मेरे पास एक php फ़ंक्शन है जो आरसी 4 एन्क्रिप्टेड स्ट्रिंग उत्पन्न करता है। मैं उस स्ट्रिंग को नोड का उपयोग करके डीकोड करना चाहता हूं - आदर्श रूप से क्रिप्टो मॉड्यूल में निर्मित का उपयोग कर। लेकिन मैं ऐसा करने में असमर्थ हूं - मुझे बस एक खाली स्ट्रिंग मिलती है।आरसी 4 के साथ नोडजेएस क्रिप्टो खाली

PHP कोड यहाँ है http://code.google.com/p/rc4crypt/

मेरे जे एस कोड

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

है मैं किसी भी उत्पादन नहीं मिलता है। मैंने जांच की है कि मेरे ओपनएसएसएल कार्यान्वयन में आरसी 4 है ओपनएसएल सूची-संदेश-डाइजेस्ट-एल्गोरिदम

मैं ओएसएक्स 10.8, नवीनतम नोड पर हूं।

मैं डिक्रिप्ट करने के लिए एक और मॉड्यूल का उपयोग करने के लिए खुला हूं - मैंने क्रिप्टोज मॉड्यूल की कोशिश की लेकिन यह पता नहीं लगा कि इसे कैसे काम करना है - मैंने आरसी 4 की कोशिश करते समय मुझे त्रुटियां दीं।

धन्यवाद

उत्तर

4

यह पता चल

पहले एक crypto.createDecipheriv का उपयोग करना चाहिए अन्यथा कुंजी है - मेरा मानना ​​है कि - md5 हैश के बजाय कच्चे इस्तेमाल किया।

दूसरा इनपुट इनपुट एन्कोडिंग म्यूट बाइनरी पर सेट किया जाएगा। चाल पूर्व अनएस्केप() + संकेत को हटाने के साथ किया था, लेकिन

तीसरा - मेरे मामले में मैं पोस्ट डेटा के साथ बजाय एक हार्डकोडेड तार का काम कर रहा था और मैं यह urldecode पड़ा - - decodeURIComponent() चोक हो चुके सिर्फ:

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); 
संबंधित मुद्दे