AES এর একটি ব্লক ডিক্রিপ্ট করা


10

আজ আপনার লক্ষ্যটি হচ্ছে AES ব্যবহার করে কোনও গোপন বার্তা ডিক্রিপ্ট করা । একটি সিফারেক্সট এবং কী দেওয়া হয়েছে আপনি বার্তাটি ডিক্রিপ্ট করে মুদ্রণ করবেন।


  1. আপনার প্রোগ্রামটি যে কোনও ভাষায় হতে পারে। এটি স্টিডিনে ইনপুট দিয়ে চালানো হবে এবং স্টাডআউটে এর আউটপুট সঠিকতার জন্য পরীক্ষা করা হবে।

  2. স্টিডিনে ইনপুটটির প্রথম লাইনটি হেক্সাডেসিমেলকে এনকোড করা 16 বাইট কী হবে। স্টিডিনে ইনপুটটির দ্বিতীয় লাইনটি হেক্সাডেসিমেলে এনকোডযুক্ত 16 বাইট সাইফারেক্সট হবে।

  3. প্রদত্ত কীটি দিয়ে AES-128 ব্যবহার করে সিফারেক্সট ডিক্রিপ্ট করার পরে প্রোগ্রামটির আউটপুট অবশ্যই 16 বাইট বার্তা হতে হবে। আপনাকে অবশ্যই ফলাফলকে ASCII অক্টেট হিসাবে আউটপুট করতে হবে। আপনি ধরে নিতে পারেন যে কোনও ফলাফল ডিক্রিপ্ট করার পরে বৈধ ASCII।

  4. আপনি কোনও গ্রন্থাগার / অন্তর্নির্মিত বৈশিষ্ট্যগুলি ব্যবহার করতে পারবেন না যা AES প্রয়োগ করে। আপনি এই জাতীয় বৈশিষ্ট্যগুলি হেক্স / বাইনারি / এএসসিআইআই এনকোডিংগুলির মধ্যে রূপান্তর করতে ব্যবহার করতে পারেন।

বাইটস মধ্যে সংক্ষিপ্ত কোড।

ইনপুট এবং আউটপুট উদাহরণ:

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

@ ইউরিপ: স্থির এটি শূন্যের সাথে গুণ করার ক্ষেত্রে একটি বাগ ছিল।
কিথ র্যান্ডাল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.