पृष्ठभूमि
एक बार का पैड एन्क्रिप्शन का एक रूप है जिसे अगर सही तरीके से इस्तेमाल किया जाए तो यह असंभव है।
एन्क्रिप्शन एक प्लेटेक्स्ट (केवल अक्षर AZ से मिलकर) और एक ही लंबाई (केवल पत्र भी) पर एक यादृच्छिक स्ट्रिंग उत्पन्न करके किया जाता है। यह स्ट्रिंग कुंजी का काम करती है। प्लेनटेक्स्ट के प्रत्येक कैरेक्टर को तब कुंजी में संबंधित कैरेक्टर के साथ जोड़ा जाता है। सिफरटेक्स्ट की गणना निम्नानुसार की जाती है: प्रत्येक जोड़ी के लिए, दोनों वर्ण संख्याओं (A = 0, B = 1, ... Z = 25) में परिवर्तित हो जाते हैं। दो संख्याओं को जोड़ा जाता है modulo 26. यह संख्या एक वर्ण में परिवर्तित की गई है।
डिक्रिप्शन बिल्कुल विपरीत है। सिफरटेक्स्ट और की के पात्रों को जोड़ा जाता है और संख्याओं में परिवर्तित किया जाता है। कुंजी को तब सिफरटेक्स्ट मोडुलो 26 से घटाया जाता है, और परिणाम वापस एक चरित्र AZ में परिवर्तित हो जाता है।
चुनौती
आपकी चुनौती सबसे कम संभव प्रोग्राम को लिखना है जो एक समय के पैड को एन्क्रिप्ट और डिक्रिप्ट कर सकता है।
इनपुट की पहली पंक्ति (STDIN) पर, "ENCRYPT" शब्द या "DECPTPT" शब्द होगा।
यदि शब्द एन्क्रिप्ट है, तो अगली पंक्ति प्लेनटेक्स्ट होगी। आपके प्रोग्राम को दो लाइनों (STDOUT) को आउटपुट करना चाहिए, पहला कुंजी और दूसरा सिफरटेक्स्ट।
यदि शब्द डिक्रिप्ट है, तो आपके प्रोग्राम को इनपुट की दो और लाइन मिलेंगी। पहली पंक्ति कुंजी होगी, और दूसरी पंक्ति सिफरटेक्स्ट होगी। आपको प्रोग्राम को एक पंक्ति आउटपुट करना चाहिए, जो कि हटाए गए प्लेनटेक्स्ट होगा।
प्लेनटेक्स्ट, सिफरटेक्स्ट और की को हमेशा अपरकेस अक्षर AZ से मिलकर बना होना चाहिए। वे हमेशा एक ही लाइन में रहेंगे और उनमें कोई व्हाट्सएप नहीं होगा।
कुंजी हमेशा यादृच्छिक होनी चाहिए। इसके किसी भी बड़े हिस्से को रनों के बीच दोहराना नहीं चाहिए, और ऐसा कोई पैटर्न नहीं होना चाहिए जो पाठ में पाया जा सके।
दो सरल उदाहरण:
ENCRYPT
HAPPYBIRTHDAY
>ABKJAQLRJESMG
>HBZYYRTICLVME
DECRYPT
ABKJAQLRJESMG
HBZYYRTICLVME
>HAPPYBIRTHDAY
>
का प्रतिनिधित्व करता है जो लाइनों, उत्पादन कर रहे हैं ताकि आप आउटपुट के रूप में है कि प्रतीक मुद्रित करने के लिए नहीं है।
/dev/random
, haveged
), बाइट्स के साथ ऑर्डर्स को एन्क्रिप्ट करके और उन्हें कुंजी के साथ एक्सरे करके डिक्रिप्ट करें। gist.github.com/5078264 कुंजी या यादृच्छिकता को स्टडिन से पढ़ा जा सकता है, संदेश या साइबरफोर्ट एक फ़ाइल नाम तर्क हो सकता है।
/dev/hwrng
, छद्म यादृच्छिक का उपयोग करने के बजाय (जो तकनीकी रूप से इसे बनाता है तो टूट जाता है।) का उपयोग करके बोनस नहीं देते हैं ।