ट्रैक
/
PHP
PHP
/
अभ्यास
/
सरल सिफर
सरल सिफर

सरल सिफर

मध्यम

निर्देश

Vigenère सिफर का एक कार्यान्वयन बनाइए। Vigenère सिफर एक साधारण सबस्टिट्यूशन सिफर है।

सिफर की शब्दावली

सिफर एक एल्गोरिदम है जिसका उपयोग किसी स्ट्रिंग को एन्क्रिप्ट या एनकोड करने के लिए किया जाता है। जो स्ट्रिंग एन्क्रिप्ट नहीं की गई है उसे प्लेनटेक्स्ट कहते हैं और एन्क्रिप्ट की गई स्ट्रिंग को सिफरटेक्स्ट कहते हैं। प्लेनटेक्स्ट को सिफरटेक्स्ट में बदलने को एनकोडिंग कहते हैं और इसका उल्टा करने को डिकोडिंग।

सबस्टिट्यूशन सिफर में प्लेनटेक्स्ट के हर अक्षर की जगह एक सिफरटेक्स्ट अक्षर रखा जाता है, जिसकी गणना एक कुंजी की मदद से की जाती है। (ध्यान दीजिए, हो सकता है कि रखा गया अक्षर मूल अक्षर जैसा ही हो।)

एन्कोडिंग का विवरण

इस सिफर में कुंजी छोटे अक्षरों की एक श्रृंखला होती है, जैसे "abcd". प्लेनटेक्स्ट के हर अक्षर को कुंजी के संगत अक्षर के आधार पर तय की गई दूरी से खिसकाया या घुमाया जाता है। कुंजी में "a" का मतलब है 0 का खिसकाव (यानी कोई खिसकाव नहीं)। कुंजी में "b" का मतलब है 1 का खिसकाव। कुंजी में "c" का मतलब है 2 का खिसकाव, और इसी तरह आगे भी।

प्लेनटेक्स्ट का पहला अक्षर कुंजी के पहले अक्षर का उपयोग करता है, प्लेनटेक्स्ट का दूसरा अक्षर कुंजी के दूसरे अक्षर का उपयोग करता है, और इसी तरह आगे भी। अगर प्लेनटेक्स्ट के अक्षर खत्म होने से पहले कुंजी के अक्षर खत्म हो जाएँ, तो कुंजी की शुरुआत से दोबारा शुरू कीजिए।

अगर कुंजी में सिर्फ एक ही अक्षर हो, जैसे "dddddd", तो प्लेनटेक्स्ट के सभी अक्षर एक ही मात्रा में खिसकाए जाते हैं (इस उदाहरण में तीन)। इससे यह घुमाव वाले सिफर या खिसकाव वाले सिफर जैसा बन जाता है (जिसे कभी-कभी सीज़र सिफर कहते हैं)। उदाहरण के लिए, प्लेनटेक्स्ट "iamapandabear" से "ldpdsdqgdehdu" बन जाएगा।

अगर कुंजी में सिर्फ "a" अक्षर हो (एक या अधिक बार), तो खिसकाव की दूरी शून्य होती है और सिफरटेक्स्ट प्लेनटेक्स्ट जैसा ही रहता है।

लेकिन आम तौर पर कुंजी इससे कहीं ज़्यादा जटिल होती है! अगर कुंजी "abcd" है, तो प्लेनटेक्स्ट के अक्षर 0, 1, 2 और 3 की दूरी से खिसकाए जाएँगे। अगर प्लेनटेक्स्ट "hello" है, तो हमें 5 बार खिसकाना पड़ेगा, इसलिए कुंजी फिर से शुरू से चलेगी और खिसकाव की दूरियाँ 0, 1, 2, 3 और 0 होंगी। "hello" के अक्षरों पर ये खिसकाव लगाने से हमें "hfnoo" मिलता है।

यादृच्छिक कुंजियाँ

अगर कोई कुंजी नहीं दी गई हो, तो एक कुंजी बनाइए जिसमें लैटिन वर्णमाला के कम से कम 100 यादृच्छिक छोटे अक्षर हों।

GitHub के ज़रिए संपादित करें यह लिंक एक नई विंडो या टैब में खुलता है
PHP Exercism

सरल सिफर शुरू करने के लिए तैयार हैं?

Exercism पर साइन अप कीजिए और PHP को 11 कॉन्सेप्ट122 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।