2010-08-09 7 views
6

मैं एक लंबी कहानी कम करने जा रहा हूं। यह थोड़ी देर हो गया है कि मैं अपना खुद का एईएस एन्क्रिप्शन/डिक्रिप्शन प्रोग्राम लागू करना चाहता हूं। एन्क्रिप्शन प्रोग्राम अच्छी तरह से चला गया और बिना किसी त्रुटि या अजीब आउटपुट के एन्क्रिप्टिंग (चूंकि मैंने अपने प्रोग्राम के आउटपुट की तुलना एक व्यावसायिक वाणिज्यिक के साथ की है और परिणाम वही था)।एईएस डिक्रिप्शन एल्गोरिदम

विकिपीडिया इस कार्यान्वयन में मेरी मार्गदर्शिका थी (जिसमें) मैंने पढ़ा है "रिवर्स राउंड का एक सेट उसी एन्क्रिप्शन कुंजी का उपयोग करके सिफरटेक्स्ट को मूल सादे टेक्स्ट में बदलने के लिए लागू किया जाता है।"

वहाँ मॉड्यूल है कि मैं कार्यान्वित की जोड़ी हैं:

  1. दौर कुंजी
  2. शिफ्ट पंक्तियां जोड़ें
  3. उप बाइट्स
  4. मिक्स कॉलम

मैं रिवर्स कार्यान्वयन की भी लागू किया जोड़ी उपर्युक्त मॉड्यूल के:

  1. रिवर्स पारी पंक्तियों
  2. रिवर्स उप बाइट
  3. रिवर्स मिक्स कॉलम

नोट: मैं के बाद से रिवर्स दौर कुंजी को लागू नहीं किया, यह XOR एन्क्रिप्शन कुंजी के साथ प्लेन ing है, और XOR का रिवर्स XOR ही (मुझे ठीक कर लें मैं गलत हूँ)

तो मैं उलटे क्रम कि मैं एन्क्रिप्शन किया में यह मॉड्यूल putted है, लेकिन कभी मैं अपने सादे-पाठ वापस मिल है:

expandkey128(key); 
rev_subbytes(data); 
rev_shiftrows(data); 
addroundkey(data,key,10); 

for(int i = 9; i>= 1; i--) { 
    rev_subbytes(data); 
    rev_shiftrows(data); 
    rev_mixColum(data); 
    addroundkey(data,key,i); 
} 

addroundkey(data,key,0); 

// Please note that I also did from 0 to 10 , 
// instead of 10 to 0 and didn't workout 

और मैंने सोचा कि शायद मुझे मॉड्यूल के रिवर्स मॉडल को लागू नहीं करना चाहिए, शायद मुझे उन मॉड्यूल का उपयोग करना होगा जिन्हें मैंने एन्क्रिप्शन किया था, केवल रिवर्स ऑर्डर में; अच्छा अंदाजा लगाए? काम नहीं किया! :

expandkey128(key); 
addroundkey(data,key,0); 

for(int i = 1; i<= 9; i++) { 
    subbytes(data); 
    shiftrows(data); 
    mixColum(data); 
    addroundkey(data,key,i); 
} 

subbytes(data); 
shiftrows(data); 
addroundkey(data,key,10); 

तो सवाल यह है कि क्या गलत है? || यदि आप करेंगे तो इन तथाकथित मॉड्यूल या फ़ंक्शंस को लागू करने का सही अनुक्रम क्या है?

+1

आपने अपने एस-बॉक्स को सही ढंग से गणना की, क्योंकि आप उसी एन्क्रिप्शन का उपयोग नहीं कर सकते जिसे आप एन्क्रिप्शन के लिए उपयोग कर रहे हैं। http://en.wikipedia.org/wiki/S-box यह टिप्पणी विकिपीडिया में अंग्रेजी संस्करण में अनुपलब्ध है। सीधे spec पर एक नज़र डालें: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf आपने डिक्रिप्ट करने के लिए व्यस्त एस-बॉक्स की गणना की है। – evildead

+0

हाँ वास्तव में rev_subbytes पर मेरे पास रिजेंडेल –

+1

का व्यस्त एस-बॉक्स है, वहां एक बेहतरीन टूल है: http://www.cryptool.de/ इसमें आप हाथ से कोई भी परिवर्तन कर सकते हैं।हो सकता है कि आपको प्रत्येक चरण को डीबग करना होगा, हो सकता है कि टूल प्रत्येक चरण को सत्यापित करने के लिए आपकी सहायता करेगा। – evildead

उत्तर

7

संचालन का आपका आदेश गलत लगता है। मुझे लगता है कि आप इस हैं:

expandkey128(key); 

addroundkey(data,key,10); 
rev_shiftrows(data); 
rev_subbytes(data); 

for(int i = 9; i>= 1; i--) { 
    addroundkey(data,key,i); 
    rev_mixColumn(data); 
    rev_shiftrows(data); 
    rev_subbytes(data); 
} 

addroundkey(data,key,0); 

अधिक जानकारी के लिए, अपने साथ संदर्भ कार्यान्वयन के साथ my stick figure explanation of AES देखते हैं।

चेतावनी: उत्पादन में इस्तेमाल के लिए अपने स्वयं के एईएस कार्यान्वयन लिखित रूप में Act 3, Scene 2, there be dragons में उल्लेख किया है।

+0

मैं या तो एईएस के लिए अपने कार्यान्वयन का उपयोग नहीं करता। अच्छा समझौता;) – evildead

+0

वैसे मैं इसे कहीं भी इस्तेमाल नहीं कर रहा हूं, बस मस्ती के लिए था! और मैंने आपके ऑर्डर की कोशिश की जो काम नहीं किया, मैंने लिंक (http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf) को भी चेक किया, अलग-अलग ऑर्डर –

+1

यह मेरी मशीन पर काम करता है और मेरे कार्यान्वयन में :)। यदि आपके पास कुछ समय है, तो मेरा सी # कार्यान्वयन डाउनलोड करें और इसके माध्यम से कदम उठाएं और प्रत्येक चरण की तुलना अपने कार्यान्वयन के साथ करें। ध्यान दें कि मैंने जो आदेश दिया है वह प्रभावी रूप से चित्र 12 जैसा ही है। मैं इसे केवल उस क्रम में पसंद करता हूं जिसे मैंने स्पष्ट करने के लिए दिया था कि यह सब कुछ उलट रहा है। रिजेंडेल पुस्तक से मेरे आउटपुट की तुलना में मेरे आउटपुट की तुलना में मुझे कुछ परीक्षण हुए, यह सुनिश्चित करने के लिए कि मेरे पास सही चीजें हैं। आपके व्यस्त कार्यों में से एक में आपको बस एक छोटी सी त्रुटि हो सकती है। मैं आपके अगले चरण के रूप में प्रत्येक दौर में धीरे-धीरे जाने की सलाह दूंगा। –