आरसी 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
आप पाएंगे कि कुंजी "परीक्षण" दिए जाने पर आपका वेब कार्यान्वयन एक ही परिणाम हो जाता है।