2012-02-17 14 views
8

मुझे आरसी 4 के साथ निष्पादन के परिणाम को एन्कोड करने की आवश्यकता है। बैश स्क्रिप्ट करने से पहले, मैं डेटा को क्रिप्ट करने का परीक्षण कर रहा हूं।आरसी 4 openssl कमांड के साथ सही ढंग से काम नहीं करता है?

मैं अगले आदेश का उपयोग कर रहा हूँ:

echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad | xxd 

और उत्पादन होता है:

0000000: bdb1 7f03        .... 

अब, अगर मैं इस ऑनलाइन RC4 एनकोडर http://www.fyneworks.com/encryption/rc4-encryption/index.asp उत्पादन होता है के साथ भी ऐसा ही करने का प्रयास करें: डीए ईए 54 65

एक ही डेटा और एक ही कुंजी के साथ अलग आउटपुट ?? डेटा: "परीक्षण" कुंजी: "परीक्षण"

इसके अलावा मैंने सी में कोड किए गए एक छोटे से प्रोग्राम के साथ जांच की, और आउटपुट वही है जो ऑनलाइन एन्कोडर ... इसलिए सवाल यह है कि, मैं openssl कमांड के साथ गलत कर रहा हूँ ??

धन्यवाद!

उत्तर

11

आरसी 4 में परिवर्तनीय-लंबाई कुंजी हैं, और ओपनएसएसएल की एन्क यूटिलिटी आपको एक प्रमुख आकार चुनने के लिए मजबूर करती है। इन अन्य कार्यान्वयनों के खिलाफ आप परीक्षण कर रहे हैं, ऐसा कोई प्रतिबंध नहीं है, इसलिए आपकी चाबियाँ मेल नहीं खाती हैं।

documentationenc उपयोगिता के लिए सिफर के लिए अनुमति दी कुंजी के आकार का वर्णन करता है:

rc4    128 bit RC4 
    rc4-64    64 bit RC4 
    rc4-40    40 bit RC4 

तो RC4 केवल एक 128-बिट (16-बाइट) कुंजी पर काम करता है। इसके अलावा, -k विकल्प का मतलब दिया गया पासफ्रेज़ से एक कुंजी प्राप्त करना है। यह आंतरिक रूप से EVP_BytesToKey फ़ंक्शन का उपयोग करता है, जो एक कुंजी व्युत्पन्न फ़ंक्शन (केडीएफ) लागू करता है।

वैसे भी, लंबी कहानी छोटी, आपके आरसी 4 कार्यान्वयन एक ही कुंजी का उपयोग नहीं कर रहे हैं। भले ही आप -K के साथ एक लघु कुंजी निर्दिष्ट

$ echo -ne "test" | openssl rc4 -k test -nosalt -e -nopad -p 
key=098F6BCD4621D373CADE4E832627B4F6 

इसके अलावा, के बाद से यह 16-बाइट कुंजी की उम्मीद है, यह शून्य-पैड छोटे कुंजी होगी: -p विकल्प का उपयोग करें OpenSSL वास्तविक कुंजी यह उपयोग कर रहा है मुद्रित करने के लिए (अपरकेस के) विकल्प। आप OpenSSL के प्रमुख को देखने के लिए फिर से xxd उपयोग कर सकते हैं "परीक्षण" और -p की ascii हेक्स मान को खोजने के लिए:

$ echo -ne "test" | xxd 
0000000: 7465 7374        test 
$ echo -ne "test" | openssl rc4 -K 74657374 -nosalt -e -nopad -p 
key=74657374000000000000000000000000 

तो तुम कुंजी लंबाई से मेल खाते हैं और -K विकल्प के साथ एक हेक्स-मूल्य कुंजी निर्दिष्ट करनी होगी और आप करेंगे आरसी 4 कार्यान्वयन समकक्ष हैं देखें। उदाहरण के लिए, यहां मैं मुख्य लंबाई को 5 बाइट्स तक सीमित करने के लिए आरसी -40 का उपयोग करता हूं और 5-बाइट कुंजी "परीक्षण", या 74 65 73 74 73 का उपयोग करता हूं।

$ echo -ne "test" | openssl rc4-40 -K 7465737473 -nosalt -e -nopad | xxd 
0000000: dd9b 5cb9 

आप पाएंगे कि कुंजी "परीक्षण" दिए जाने पर आपका वेब कार्यान्वयन एक ही परिणाम हो जाता है।

संबंधित मुद्दे