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