क्या आपने कभी सीज़र सिफर के बारे में सुना है?
जूलियस सीज़र ने इस तकनीक का उपयोग अपने दुश्मनों से गुप्त संदेश छिपाने के लिए किया था!
सीज़र सिफर सबसे प्राचीन एन्क्रिप्शन तकनीकों में से एक है।
इस प्रणाली के पीछे मुख्य विचार अक्षरों को घुमाना वर्णमाला पर x संख्या में स्थितियों द्वारा है।
उदाहरण के लिए, x = 1 के साथ, एक 'A' 'B' बन जाता है, एक 'C' 'D' बन जाता है और इसी तरह।

तो हम इसे कोड में कैसे लागू करते हैं?
खुशी है कि आपने पूछा, यह पता चलता है कि यह उतना कठिन नहीं है जितना लगता है। हम इस तथ्य का लाभ उठाने जा रहे हैं कि अक्षरों को संख्याओं (ASCII कोड) द्वारा दर्शाया जा सकता है, जो अक्षरों को घुमाने का काम केवल दो संख्याओं को एक साथ जोड़ने का मामला बना देगा।
अपना खुद का सीज़र सिफर कनवर्टर बनाना
हम एक इनपुट स्ट्रिंग को एक पूर्णांक सरणी में बदलकर शुरू करेंगे:
ascii = "test".chars.map(&:ord)
आइए इसे तोड़ते हैं:
chars विधि स्ट्रिंग को अक्षरों की एक सरणी में विभाजित करती है और एक एन्यूमरेटर लौटाती है। परिणामस्वरूप हम सरणी पर map कॉल कर सकते हैं।
map विधि तब बहुत उपयोगी होती है जब हम किसी सरणी के सभी तत्वों को किसी तरह से बदलना चाहते हैं। map का रिटर्न मान परिवर्तित तत्वों के साथ एक और सरणी होता है।
नोट: इस सिंटैक्स के लिए रूबी 1.9+ की आवश्यकता होती है, और यह इसके समतुल्य है:
ascii = "test".chars.map { |c| c.ord }
चूंकि हम हर अक्षर को उसके संबंधित ASCII मान में बदलना चाहते हैं, हम सरणी के हर तत्व पर ord विधि को कॉल करते हैं।
हमारे उदाहरण में, आउटपुट यह होगा:
[116, 101, 115, 116]
रोटेशन का समय
बहुत बढ़िया!
अगला कदम उन रोटेशन्स की संख्या को जोड़ना है जो हम चाहते हैं। हम इसे फिर से map का उपयोग करके कर सकते हैं:
shifted = ascii.map { |c| c + 5 } => [121, 106, 120, 121]
अब हम बस संख्याओं को वापस अक्षरों में बदल सकते हैं, और उन्हें जोड़ सकते हैं, जो हमें एन्क्रिप्टेड स्ट्रिंग देगा:
shifted.map { |c| c.chr }.join => "yjxy"
हमारे मूल स्ट्रिंग को पुनः प्राप्त करने के लिए हमें बस उसी प्रक्रिया को फिर से लागू करना होगा, लेकिन इस बार बाईं ओर शिफ्ट करना होगा।
मूल रूप से हमारे द्वारा उपयोग की गई स्थितियों की समान मात्रा से शिफ्ट करना महत्वपूर्ण है; अन्यथा, हम अपना मूल डेटा पुनर्प्राप्त नहीं कर पाएंगे।
अंतिम कोड और वैकल्पिक संस्करण
आप तैयार सीज़र सिफर कोड यहां पा सकते हैं।
यह एक दी गई स्ट्रिंग के लिए सभी 26 संभावित पुनरावृत्तियों का उत्पादन करता है और यह रैपिंग को भी संभालता है (पोस्ट में उदाहरण नहीं करते)।
एक वैकल्पिक संस्करण भी है जो Array#rotate का उपयोग करता है।
आपको यह भी पसंद आ सकता है:
रूबी स्ट्रिंग फॉर्मेटिंग