का उपयोग जो मुझे पता है, सीटीआर मोड प्रारंभिक वेक्टर का उपयोग नहीं करता है। यह सिर्फ एक काउंटर लेता है, इसे एक दी गई कुंजी के साथ एन्क्रिप्ट करता है और फिर XOR का परिणाम साइडटेक्स्ट प्राप्त करने के लिए सादे टेक्स्ट के साथ होता है।सीटीआर मोड प्रारंभिक वेक्टर (IV)
एन्क्रिप्शन करने से पहले सीबीसी जैसे अन्य ब्लॉक सिफर मोड वे प्रारंभिक वेक्टर के साथ सादे टेक्स्ट को एक्सओआर करते हैं।
तो मेरी समस्या यहां है। मैं जावा में निम्नलिखित कोड (bouncycastle लाइब्रेरी का उपयोग) है:
Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, key);
byte[] result = cipher.doFinal("Some plaintext");
एक ही कुंजी के साथ उपरोक्त कोड का हर अलग-अलग कॉल विभिन्न उत्पादन देता है! लेकिन जब:
byte[] IV = new byte[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
Cipher cipher = Cipher.getInstance("AES/CTR/PKCS5Padding", "BC");
cipher.init(Cipher.ENCRYPT_MODE, key, IV);
byte[] result = cipher.doFinal("Some plaintext");
मैं उपरोक्त कोड के प्रत्येक कॉल में एक ही परिणाम लेता हूं। लेकिन यह क्यों है? मेरा मतलब है, सीटीआर को IV की आवश्यकता नहीं है, इसलिए जब मैं प्रत्येक कॉल में IV नहीं देता हूं तो मुझे एक अलग परिणाम मिलता है और जब मैंने IV को दिया तो यह वही परिणाम देता है? यदि सीटीआर का उपयोग करते समय मैं हमेशा उपरोक्त चतुर्थ (सभी शून्य) का उपयोग करता हूं, तो क्या यह सुरक्षित होगा?
कोई भी विचार बहुत उपयोगी होगा। धन्यवाद
[यदि आप अपने कोड में अक्षर एईएस टाइप कर रहे हैं, तो आप इसे गलत कर रहे हैं।] (Http://chargen.matasano.com/chargen/2009/7/22/if-youre-typing-the -लेटर-एएस-इन-कोड-आप-कर रहे हैं.html) –
क्रिप्टो * वास्तव में आसान * पेंच करने के लिए है। और उन तरीकों से पेंच जो पूरी तरह से अदृश्य हैं जब तक कि कोई उनका शोषण न करे। बजाय एक हार्ड-टू-स्क्रू-अप इंटरफ़ेस के साथ एक स्थापित लाइब्रेरी का उपयोग करें। –
@ एनॉन। मैं अपना खुद का चतुर्थ भी चुनता हूं, कृपया आओ और मुझे मार दो। (संकेत: कुछ लोग जानते हैं कि वे क्या कर रहे हैं, आपके कोड में एईएस टाइप न करने की यह सामान्य सलाह बेवकूफ है।) – Luc