নীচে বর্ণিত হিসাবে একটি সাইফার সাবার এনক্রিপশন প্রোগ্রাম প্রয়োগ করুন । নির্দেশিকা:
- সবচেয়ে ছোট এন্ট্রি, বাইটে, জিতল।
- তবে কোড-গল্ফের নিয়মাবলী থেকে বিদায় নেওয়ার পরে, আকর্ষণীয় এন্ট্রিগুলি পোস্ট করার জন্য আপনাকে স্বাগত জানানো হয়, যদিও সেগুলি গল্ফ এন্ট্রিগুলি গুরুতর নয়।
- একটি এন্ট্রি সাধারণত একটি প্রোগ্রাম হতে পারে যা স্ট্যান্ডার্ড ইনপুট থেকে প্লেটেক্সট নেয় এবং সিফারেক্সটকে স্ট্যান্ডার্ড আউটপুটে লেখেন, কীটি নির্দিষ্ট করে (ব্যবহারকারীর দ্বারা) আপনার পছন্দের কোনও উপায়ে।
- তবে, আপনি যদি এটি একটি প্রক্রিয়া হিসাবে প্রয়োগ করতে চান তবে এটিও ঠিক আছে।
- আইভি অবশ্যই একটি ক্রিপ্টোগ্রাফিক সুরক্ষিত সিউডোর্যান্ডম নম্বর জেনারেটর থেকে আসতে হবে। যদি আপনার ভাষা এটি সমর্থন করে না, তবে একটি আলাদা ভাষা চয়ন করুন। ;-)
- দয়া করে কোনও ক্রিপ্টো-নির্দিষ্ট গ্রন্থাগার, সিস্টেম কল বা নির্দেশাবলী (পিআরএনজি ব্যতীত উপরে বর্ণিত) ব্যবহার করবেন না। অবশ্যই, জেনেরিক নিম্ন-স্তরের বিটওয়াইজ অপারেশনগুলি ঠিক আছে।
সিফারস্যাবারটি আরসি 4 / আর্কফুরের একটি বৈকল্পিক, সুতরাং আমি পরবর্তীকালের বর্ণনা দিয়ে শুরু করব, তারপরে সিফারস্যাবারটি তার পরিবর্তনগুলি করে।
0. আরসি 4 / আর্কফোর
আরকফোর পুরোপুরি অন্য কোথাও নির্দিষ্ট করে দেওয়া হয়েছে , তবে সম্পূর্ণতার জন্য, আমি এটি এখানে বর্ণনা করব। (ইন্টারনেট-খসড়া এবং এই বর্ণনার মধ্যে কোনও তাত্পর্য থাকলে, পূর্ববর্তীটি আদর্শিক)
কী সেটআপ
দুটি অ্যারে S
এবং S2
256 দৈর্ঘ্যের উভয়ই সেট আপ করুন যেখানে k_1
কীটির প্রথম বাইট এবং k_n
শেষটি।
S = [0, ..., 255]
S2 = [k_1, ..., k_n, k_1, ...]
( S2
সমস্ত 256 বাইট পূরণ না হওয়া পর্যন্ত বার বার কীটির বাইটগুলি দিয়ে পূর্ণ করা হয়))
তারপরে, j
0 থেকে আরম্ভ করুন এবং 256 বার এলোমেলো করুন:
j = 0
for i in (0 .. 255)
j = (j + S[i] + S2[i]) mod 256
swap S[i], S[j]
end
এটি কী সেটআপ সম্পূর্ণ করে। S2
অ্যারে আর এখানে ব্যবহৃত হয়, এবং ধৌত করা যেতে পারে।
সাইফার স্ট্রিম জেনারেশন
আরম্ভ করুন i
এবং j
0 এ, তারপরে নিম্নলিখিত স্ট্রিমটি উত্পন্ন করুন:
i = 0
j = 0
while true
i = (i + 1) mod 256
j = (j + S[i]) mod 256
swap S[i], S[j]
k = (S[i] + S[j]) mod 256
yield S[k]
end
এনক্রিপ্ট / ডিক্রিপ্টিং ডেটা
- এনক্রিপ্ট করতে, XOR প্লেইন টেক্সট সহ মূলধারার আউটপুট
- ডিক্রিপ্ট করার জন্য, সিফেরেক্সটেক্সট সহ কী-স্ট্রিম আউটপুট এক্সওআর করুন
1. সাইফারস্যাবার
সাইফারস্যাবার (যা আমরা এই প্রশ্নে প্রয়োগ করছি) এটি দুটি উপায়ে আরসি 4 / আর্কফুরের একটি বৈচিত্র্য:
10-বাইট চতুর্থ / ননস
কোনও বার্তা এনক্রিপ্ট করার সময়, 10 টি এলোমেলো বাইটগুলি পাওয়া উচিত, যেমন মাধ্যমে /dev/urandom
, এবং এনক্রিপ্ট করা আউটপুটটির প্রথম 10 বাইটে লেখা উচিত। কোনও বার্তা ডিক্রিপ্ট করার সময়, ইনপুটটির প্রথম 10 বাইট হ'ল IV এটি এনক্রিপ্ট করতে ব্যবহৃত হয়।
আরসি 4 / আরকফোর কী সেটআপ স্টেজটি কী passphrase || IV
হিসাবে চালিত হয় , যেখানে passphrase
ব্যবহারকারী-নির্দিষ্ট পাসফ্রেজটি IV
উপরে বর্ণিত হিসাবে বর্ণনা করা হয়েছে, এবং সংক্ষিপ্তকরণ ||
। সুতরাং, "হ্যালো, বিশ্ব!" এর একটি পাসফ্রেজ এবং "সুপারকালিফ" এর আইভি (যদিও এটি অসম্ভব: অসম্ভব) এর ফলশ্রুতিতে "হ্যালো, ওয়ার্ল্ড! সুপার ক্যালিফ" এর চাবি তৈরি হবে।
কী সেটআপের একাধিক পুনরাবৃত্তি
ডাব্লুইইপি এনক্রিপশনকে পুরোপুরি ভাঙা করে তোলে এমন দুর্বলতা রোধে সহায়তার জন্য, আরসি 4-র কী সেটআপ পর্বের শিফলিং লুপটি একটি ব্যবহারকারী-নির্দিষ্ট সংখ্যক বার চালিত হয়। j
পুনরাবৃত্তির মধ্যে মানটি ধরে রাখা উচিত should
2. পরীক্ষা ভেক্টর
আপনার প্রোগ্রামগুলি পরীক্ষা করতে আপনি কয়েকটি পরীক্ষামূলক ভেক্টর ব্যবহার করতে পারেন। তদ্ব্যতীত, খুঁতখুঁতে ossifrage একটি নির্মিত CipherSaber এনক্রিপশন & ডিক্রিপশন টুল যা আপনি আপনার ফলাফল যাচাই করতে ব্যবহার করতে পারেন।
আপনার কেবলমাত্র এনক্রিপশন প্রোগ্রামটি প্রয়োগ করতে হবে। আপনার ডিক্রিপশন প্রোগ্রাম সরবরাহ করার দরকার নেই, তবে সঠিক কী ব্যবহার করে সঠিকভাবে প্রয়োগ করা ডিক্রিপশন প্রোগ্রামের সাথে প্রক্রিয়া করার সময় আপনার এনক্রিপশন প্রোগ্রামটির আউটপুট অবশ্যই মূল ইনপুটটিতে সঠিকভাবে গোলটেপ করা উচিত।
urandom
"জয়ের" বিষয়ে চিন্তা করলে আপনি এমন একটি সংস্করণ তৈরি করতে পারেন যা ব্যবহার করে (যা আপনি পছন্দ করলে একটি পৃথক এন্ট্রি হতে পারে)। :-)