एईएस के ब्लॉक को डिक्रिप्ट करना


10

आज आपका लक्ष्य AES का उपयोग करके एक गुप्त संदेश को डिक्रिप्ट करना है । एक सिफरटेक्स्ट और की को देखते हुए आप संदेश को डिक्रिप्ट और प्रिंट करेंगे।


  1. आपका कार्यक्रम किसी भी भाषा में हो सकता है। इसे स्टड पर इनपुट के साथ चलाया जाएगा, और स्टडआउट पर इसके आउटपुट को शुद्धता के लिए जांचा जाएगा।

  2. स्टड पर इनपुट की पहली पंक्ति 16 बाइट कुंजी होगी, जो हेक्साडेसिमल में एन्कोडेड होगी। स्टड पर इनपुट की दूसरी लाइन 16 बाइट सिफरटेक्स्ट होगी, जो हेक्साडेसिमल में एन्कोडेड होगी।

  3. दिए गए कुंजी के साथ एईएस -128 का उपयोग करके सिफरटेक्स्ट को डिक्रिप्ट करने के बाद कार्यक्रम का आउटपुट 16 बाइट संदेश होना चाहिए। आपको ASCII ओकटेट के रूप में व्याख्या किए गए परिणाम को आउटपुट करना होगा। आप मान सकते हैं कि डिक्रिप्ट करने के बाद कोई भी परिणाम ASCII मान्य है।

  4. आप एईएस लागू करने वाले किसी भी पुस्तकालय / अंतर्निहित सुविधाओं का उपयोग नहीं कर सकते हैं। आप हेक्स / बाइनरी / ASCII एन्कोडिंग के बीच कनवर्ट करने के लिए ऐसी सुविधाओं का उपयोग कर सकते हैं।

बाइट्स में सबसे छोटा कोड जीतता है।

उदाहरण इनपुट और आउटपुट:

bd8ab53f10b3d38576a1b9a15cf03834
02c0ee126cae50ba938a8b16f0e04d23

कल हमला।

और दुसरी:

f4af804ad097ba832906db0deb7569e3
38794338dafcb09d6b32b04357f64d4d

बधाई हो।


5
... एईएस क्या है
एलेक्स ए।


जवाबों:


4

अजगर, 661 चरस

R=range
I=lambda x:[int(x[2*i:2*i+2],16)for i in R(16)]
k=I(raw_input())
c=I(raw_input())
P=[]
x=1
for i in R(512):P+=[x];x^=x*2^(x>>7)*0x11b
S=[255&(99^j^(j>>4)^(j>>5)^(j>>6)^(j>>7))for i in R(256)for j in[(P[255-P.index(i)]if i else 0)*257]]
for r in R(10):
 for i in R(4):k+=[k[-16]^S[k[-3-(i>2)*4]]]
 k[-4]^=[1,2,4,8,16,32,64,128,27,54][r]
 for i in R(12):k+=[k[-16]^k[-4]]
for r in R(11):
 c=[x^y for x,y in zip(k[160-16*r:],c)]
 if r>9:break
 for i in[0,4,8,12]*(r>0):c[i:i+4]=[x^y^z^w for j in R(4)for x,y,z,w in[[P[a+P.index(v)]if v else 0 for a,v in zip((2*[104,238,199,223])[3-j:],c[i:i+4])]]]
 c=(c*13)[::13];c=map(S.index,c)
print''.join(map(chr,c))

kकुंजी cहै, सिफरटेक्स्ट है। मैं पी, क्षेत्र में 3 की शक्तियों का निर्माण करता हूं, फिर S, बॉक्स। फिर kकुंजी अनुसूची के साथ बढ़ाया जाता है। अंत में हम एईएस डिक्रिप्शन करते हैं। मिक्सकॉलेम्स कठिन चरण है, अन्य सभी चरण बहुत सीधे हैं।


हो सकता है कि आपको पाइथ में एक भी करना चाहिए, अन्यथा मैं आपको गारंटी दूंगा कि कोई आपके साथ झाड़ू और अनुवाद करेगा, आपको हरा देगा :)
orlp

एक त्वरित परीक्षण के रूप में मैंने एक और टेस्टकेस उत्पन्न किया, लेकिन आपका समाधान इसके लिए विफल है। मैंने प्रश्न में दूसरा टेस्टकेस जोड़ा ताकि आप डिबग कर सकें।
orlp

@orip: निश्चित। यह शून्य से गुणा करने में एक बग था।
कीथ रान्डेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.