2016-02-18 8 views
5

CryptoJS.AES.encrypt का उपयोग करते समय यह प्रारंभिक वेक्टर के साथ कैसे आता है यदि तीसरा तर्क फ़ंक्शन पर पास नहीं होता है? क्या इसे एन्क्रिप्टेड स्ट्रिंग से बाहर निकालने का कोई तरीका है?क्रिप्टोजेएस को कोई चौथाई क्यों मिलता है जब कोई निर्दिष्ट नहीं होता है?

कारण मुझे इसकी आवश्यकता है मुझे कुछ को CryptoJS.AES.encrypt को लुआ का उपयोग करके वापस करने की आवश्यकता है, लेकिन मेरे पास केवल यही कुंजी है जो प्रदान की गई थी।

+0

यह अभी भी मेरे लिए अस्पष्ट नहीं है और मुझे यकीन नहीं है कि उत्तर कैसे प्राप्त करें। अभी भी मदद की तलाश है :( – warspyking

+0

खैर, क्रिप्टो-जेएस ओपन सोर्स है, इसलिए आप आसानी से स्रोत कोड देख सकते हैं। मैंने संबंधित चीजों का भी जवाब दिया है ([1] (http://stackoverflow.com/a/27971983/ 1816580) और [2] (http://stackoverflow.com/a/33942660/1816580) और [3] (http://stackoverflow.com/a/28361216/1816580))। यह मूल रूप से ओपनएसएसएल के EVP_BytesToKey फ़ंक्शन है। –

+0

@ आर्टजॉम बी। तो आप कह रहे हैं कि अगर मैंने EVP_BytesToKey को रीमेड किया है, उदाहरण के लिए, लूआ उदाहरण के लिए, मैं CryptoJS.AES.Encrypt को दिया गया पासवर्ड प्रदान कर सकता हूं और दोनों से कुंजी और iv प्राप्त कर सकता हूं? – warspyking

उत्तर

6

क्रिप्टोजेएस 'CryptoJS.<BlockCipher>.encrypt में एन्क्रिप्शन के दो तरीके हैं।

  1. आप कोई कुंजी में पारित कि एक स्ट्रिंग, बल्कि एक WordArray (बाइनरी डेटा के लिए CryptoJS के आंतरिक प्रतिनिधित्व प्रारूप), कुंजी के रूप में-है लिया जाता है नहीं है। यह मोड ईसीबी को छोड़कर ऑपरेशन के सभी तरीकों के लिए एक चौथाई की अपेक्षा करता है, जो IV का उपयोग नहीं करता है, इसलिए आपको एक निर्दिष्ट करने की आवश्यकता नहीं है। यदि कोई चतुर्थ पास नहीं हुआ है, तो यह डिफ़ॉल्ट (कुछ जावास्क्रिप्ट जादू के माध्यम से) शून्य शून्य चतुर्थ (0x00 बाइट्स का पूरा ब्लॉक शामिल होगा) में डिफ़ॉल्ट होगा।

  2. यदि आप "कुंजी" में गुजरते हैं तो एक स्ट्रिंग है, तो यह मान जाएगा कि "कुंजी" एक पासवर्ड है। पासवर्ड से एक कुंजी प्राप्त करने के लिए, यह OpenSSL- संगत व्युत्पन्न फ़ंक्शन EVP_BytesToKey का उपयोग करता है। यह मोड एक नया 8 बाइट यादृच्छिक नमक उत्पन्न करता है और कुंजी और चतुर्थ उत्पन्न करने के लिए पासवर्ड के साथ इसका उपयोग करता है। यहां तक ​​कि यदि आप स्पष्ट रूप से एक चतुर्थ में गुजरते हैं, तो इसका उपयोग नहीं किया जाएगा। एक Base64- एन्कोड सिफर कि शुरुआत 8 बाइट नमक और वास्तविक सिफर द्वारा पीछा किया पर स्ट्रिंग "Salted__" शामिल हैं में

    CryptoJS.AES.encrypt(msg, password).toString() 
    

    का परिणाम है। आप इसे उपयोग से पहले स्पष्ट रूप से विभाजित कर सकते हैं:

    var ct = CryptoJS.AES.encrypt(msg, password); 
    var saltHex = ct.salt.toString();  // random salt 
    var ctHex = ct.ciphertext.toString(); // actual ciphertext 
    var ivHex = ct.iv.toString();   // generated IV 
    

    यदि आपको एक ही कुंजी व्युत्पन्न को फिर से बनाने की आवश्यकता है। the code और the specification पर एक नज़र डालें।

    कुंजी में उच्च एन्ट्रॉपी होना चाहिए और यादृच्छिक शोर से अलग होना चाहिए, जिससे उनके लिए क्रूर मजबूर होना मुश्किल हो जाता है। उपर्युक्त EVP_BytesToKey सुरक्षित नहीं है, क्योंकि MD5 हैशिंग बहुत तेज़ है, जो हमलावर को पासवर्ड को बलपूर्वक बल देने में सक्षम बनाता है। आपको या तो वास्तव में एक लंबे पासवर्ड (20-30 वर्ण) का उपयोग करने की आवश्यकता है या एक उचित कुंजी व्युत्पन्न कार्य का उपयोग करें जैसे कि पीबीकेडीएफ 2, जो क्रिप्टोजेएस प्रदान करता है।

+0

ठीक है तो मैं बेस 64 पूर्ववत करने में सक्षम हूं, तो आप कहते हैं कि 8 बाइट नमक नमकीन__ के बाद है? मुझे नहीं पता कि इस ओ_ओ को कैसे डिक्रिप्ट करना है। मुझे कुछ पता चल जाएगा, हालांकि जानकारी के लिए धन्यवाद, यह बहुत उपयोगी था। – warspyking

+0

मैं अभी भी पूरी तरह से सुनिश्चित नहीं हूं कि आपको क्या मिला। अगर मैं आपको सही ढंग से समझता हूं, तो आप क्रूटोजेएस में एक सिफरटेक्स्ट को डिक्रिप्ट करने का प्रयास कर रहे हैं जो आपको लुआ एप्लिकेशन से मिला है। यदि आपके पास लुआ कोड तक पहुंच है, तो मेरा सुझाव है कि आप बारीकी से देखें कि एन्क्रिप्शन कैसे किया गया था और फिर आप तय कर सकते हैं कि क्रिप्टोजेएस में इसी तरह का डिक्रिप्शन कैसा दिखता है। साथ ही, आपको डिक्रिप्शन के लिए EVP_BytesToKey को दोहराने की आवश्यकता नहीं है, क्योंकि 'CryptoJS.AES.decrypt'' CryptoJS.AES.encrypt' जैसी सटीक विधियों का समर्थन करता है। इसके अलावा, एईएस कुंजी की एक विशिष्ट लंबाई होती है, लेकिन पासवर्ड नहीं होते हैं। आपकी कुंजी कब तक है? –

+0

यह वही है जो मैं कर रहा हूं: 1. संरक्षित टेक्स्ट को संरक्षित टेक्स्ट के साथ सेट करना 2. इसे पासवर्ड देना 3. (मुझे विश्वास है) यह साइट मेरे पासवर्ड के साथ उस हैश के माध्यम से रखती है 4. मैं प्राप्त करने के लिए अनुरोध प्राप्त करता हूं कुछ समय बाद 5 पर धोया गया सामग्री। मुझे इसे हश (और बेस 64) राज्य से वापस पढ़ने योग्य मानव प्रारूप में लाने के लिए लुआ कोड का उपयोग करने की आवश्यकता है। – warspyking

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

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