encryption - Advanced thinking on Caesar Cipher program in C -
#include & lt; stdio.h & gt; शून्य सीज़र (चार सिफर [], इंट शिफ्ट); Int main () {कोर सिफर [200]; अंतर बदलाव; Printf ("छोटे अक्षर में एन्क्रिप्टेड होने के लिए पाठ दर्ज करें:"); हो जाता है (सिफर); Printf ("सही की ओर बदलाव की संख्या:"); Scanf ("% d", और पाली); सीज़र (साइफर, शिफ्ट); वापसी 0; } शून्य सीज़र (चार सिफर [], इंट शिफ्ट) {int i = 0; जबकि (साइफर [आई]! = '\ 0') {यदि ((साइफर [आई] + शिफ्ट)> = 97 और एंड्रॉइड (साइफर [आई] + शिफ्ट) & lt; = 122) {साइफर [आई] + = (बदलाव); } अन्य {साइफर [i] + = (बदलाव - 25); } I ++; } Printf ("% s", साइफर); }
रिक्त स्थान के संचालन को मैं कैसे अनदेखा कर सकता हूं? मेरा मतलब है, मैं अपने परिवर्तित / डिक्रिप्टेड स्ट्रिंग में रिक्त स्थान जोड़ना चाहता हूं। जब मैं इस कार्यक्रम को चला रहा हूं तो यह एन्क्रिप्टेड स्ट्रिंग से रिक्त स्थान को नष्ट कर देता है। मैं यह कैसे कर सकता हूँ? मान लीजिए, "यह एक कलम है" बन जाएगा: "यूजट जेटी बी क्यूएफओ" अगर सही 1 से बदलाव होता है।
आपको जांचना चाहिए कि कोई चरित्र स्थानांतरण करने से पहले एक अक्षर है या नहीं। आपका कोड सबकुछ बदलता है और जांचता है कि क्या कोई पात्र एक लपेटने का पता लगाने के बाद एक वैध पत्र है। (यह पॉइटयूएशन भी नहीं बना रहा है और रिक्त स्थान गायब हो गया है, यह 32 से नीचे एएससीआईआई वैल्यू के साथ गैर-प्रिंट करने योग्य पात्रों में उन्हें परिवर्तित करता है।)
आप मॉडुलो ऑपरेटर का उपयोग करके सही लपेटने को भी लागू कर सकते हैं:
<प्री> शून्य सीज़र (चार सिफर [], इंट पाईट) {char * p = cipher; जबकि (* p) {if ('a' और lt; = * p & amp;; p & lt; = 'z') {* p = 'a' + (* p - 'a' + shift)% 26; } पी ++; }}
यदि आप बदलाव का स्वत: पता लगाने के लिए चाहते हैं, तो सभी 26 संभावित पाली के लिए ब्रूट बल का उपयोग करें और सामान्य अपेक्षित उपस्ट्रिंग की जांच करें:
int ऑटोकैसर (चार सिफर []) {इंट पाइंट = 0; जबकि (बदलाव & lt; 26) {if (strstr (साइफर, "the")) वापसी बदलाव; यदि (strstr (साइफर, "यह")) वापसी बदलाव; यदि (strstr (साइफर, "वह")) बदलाव वापस; सीज़र (साइफर, 1); शिफ्ट ++; } वापसी -1; }
फ़ंक्शन strstr
में & lt; string.h> gt;
है और स्ट्रिंग में कोई सबस्ट्रिंग पाता है। यह बहुत कुटिलता से यहां किया जाता है: इसे लागू नहीं किया जाता है कि "the"
स्वयं का एक शब्द है इसके अलावा, चेक केस संवेदी है।
ध्यान दें कि सिफर को एक समय में एक अक्षर स्थानांतरित किया जाता है, क्योंकि मूल स्ट्रिंग को लगातार स्थानांतरित किया जाएगा। अगर कुछ भी ओएस नहीं पाया जाता है, तो यह मूल स्ट्रिंग को शामिल करने के लिए लिपटेगा।
Comments
Post a Comment