VIC सिफर सबसे जटिल पेंसिल और कागज सिफर कभी तैयार की है। 1950 के दशक में सोवियत जासूस रीनो हैहलेन द्वारा प्रयुक्त, "VICTOR" नाम से कोडित, इसका मुख्य सिद्धांत ओफ़्फ़्यूशन के माध्यम से सुरक्षा है; एक बहुत कहानियो की।
आपका कार्य एक प्रोग्राम या फ़ंक्शन लिखना है जो एक संदेश लेगा और इसे VIC सिफर का उपयोग करके एनकोड करेगा। मैंने यहां एक VIC सिफर डिकोडर चैलेंज भी पोस्ट किया है । यदि निम्न में से कोई भी निर्देश अस्पष्ट हैं, तो टिप्पणियों में उनके बारे में पूछने में संकोच न करें। निर्देश इस साइट से अनुकूलित किए गए हैं ।
VIC सिफर एन्कोडिंग
तैयारी
आपको पाँच इनपुट की आवश्यकता होगी:
- मैदानी संदेश
- एक छोटा कीवर्ड या वाक्यांश जिसमें आपकी भाषा के सबसे सामान्य अक्षर हैं
- एक प्रमुख वाक्यांश, जैसे कि एक उद्धरण या गीत से एक पंक्ति (कम से कम 20 अक्षर)
- एक तारीख (या एक अन्य संख्या जो छह अंकों या अधिक है)
- एक व्यक्तिगत एजेंट संख्या
व्यवहार में, इन अंतिम चार को पहले से ही प्रेषक और प्राप्तकर्ता द्वारा सहमत होना चाहिए, जिसमें यह भी शामिल है कि प्रेषक या प्राप्तकर्ता का एजेंट नंबर एन्कोडिंग में उपयोग किया जाता है या नहीं।
मेरा उदाहरण संदेश होगा: We are discovered. Take what you can. Burn everything else. Move to Safehouse Foxtrot 3.
हम अंग्रेजी में एन्कोडिंग करेंगे (हालाँकि आप जो भी भाषा और वर्णमाला पसंद करते हैं उसका उपयोग कर सकते हैं) और अंग्रेजी वर्णमाला में सबसे आम अक्षर हैं A, E, I, N, O, R, S, T
। मैं कीवर्ड का उपयोग करूँगा SENATORI
।
मेरा मुख्य वाक्यांश रिचर्ड फेनमैन का एक उद्धरण है: "पहला सिद्धांत यह है कि आपको खुद को मूर्ख नहीं बनाना चाहिए - और आप मूर्ख बनाने वाले सबसे आसान व्यक्ति हैं।"
दिनांक के रूप में, मैं 31 जुलाई, 2016 (प्रारूप में) का उपयोग करूँगा 3172016
) का , जिस दिन यह विवरण मैंने लिखा था।
मैंने अपने लिए जो व्यक्तिगत नंबर चुना है, वह है 9
।
चरणों का सारांश
- निम्नलिखित चरणों में उपयोग के लिए मध्यवर्ती कुंजियों को वितरित करें।
- स्ट्रैडलिंग चेकबोर्ड का निर्माण और आवेदन करें।
- पहले ट्रांसपोज़न टेबल का निर्माण और आवेदन करें।
- दूसरे (विघटित) ट्रांसपोज़ेशन टेबल का निर्माण और आवेदन करें।
- संदेश संकेतक समूह को सम्मिलित करके संदेश को अंतिम रूप दें।
Submechanisms
मामले के मांस में उतरने से पहले दो और बातें बताई गई हैं: श्रृंखला जोड़ और अनुक्रमिक की प्रक्रियाएँ।
चेन जोड़, जिसे एक लैग्ड फाइबोनैचि जनरेटर के रूप में भी जाना जाता है, एक शुरुआती अंक अनुक्रम लेकर काम करता है, पहले दो अंकों को बिना ले जाने (उन्हें फिर mod 10
जोड़कर) जोड़कर परिणाम को अंतिम रूप देता है। उदाहरण के लिए:
79081
7 + 9 = 6
790816
9 + 0 = 9
7908169
0 + 8 = 8
79081698
8 + 1 = 9
790816989
1 + 6 = 7
7908169897
... and so on
अनुक्रमिकता अनिवार्य रूप से अक्षरों या अंकों का एक क्रम ले रही है और उन्हें अपने वर्णमाला / संख्यात्मक क्रम से लेबल कर रही है। डुप्लिकेट को बाएं से दाएं लेबल किया जाता है। उदाहरण के लिए:
E X A M P L E
0 # A
1 0 2 # Es
1 0 3 2 # L
1 0 4 3 2 # M
1 0 4 5 3 2 # P
1 6 0 4 5 3 2 # X
3 3 0 5 8 4 2 0 4 7 5 4 8 1
0 1 # 0s
0 1 2 # 1
0 3 1 2 # 2
4 5 0 3 1 2 # 3s
4 5 0 6 3 1 7 8 2 # 4s
4 5 0 9 6 3 1 7 10 8 2 # 5s
4 5 0 9 6 3 1 7 11 10 8 2 # 7
4 5 0 9 12 6 3 1 7 11 10 8 13 2 # 8s
मैं यहां जीरो-इंडेक्सिंग का उपयोग करता हूं, लेकिन इंडेक्स आपको पसंद है।
1. इंटरमीडिएट की
कुंजी वाक्यांश के पहले 20 अक्षरों को 10 के दो समूहों में विभाजित करें और प्रत्येक को अलग-अलग अनुक्रमित करें, जिसे हम कॉल करेंगे S1
और S2
।
THEFIRSTPR
S1: 8201357946
INCIPLEIST
S2: 2603751489
एक यादृच्छिक 5-अंकीय संदेश पहचानकर्ता चुनें, M
(यदि आप चाहें तो यह इनपुट में से एक हो सकता है):
M = 47921
घटाएँ, उधार लेने के बिना (घटाना mod 10
), कुंजी तारीख के पहले पांच अंक 3172016
से M
:
M 47921
date - 31720
= 16201
जब तक आपके पास दस अंक न हों, तब तक परिणाम जोड़ें:
1620178218
प्राप्त करने के लिए, S1
ले या बिना, इन अंकों को जोड़ें :mod 10
G
1620178218
S1 + 8201357946
G = 9821425154
ऊपर S2
, अनुक्रम 0123456789 लिखें। अनुक्रम 0123456789 में प्रत्येक अंक का पता लगाएँ G
और इसे नीचे सीधे अंक के साथ बदलें S2
। परिणाम है T
।
0123456789
S2 2603751489
G 9821425154
T 9806705657
T
60 अंकों तक विस्तार करने के लिए श्रृंखला जोड़ का उपयोग करें ।
9806705657
becomes
980670565778637511245490262369939288595822106344304316978734
ये पिछले 50 अंक, प्रत्येक दस अंकों की पांच पंक्तियों में, U
ब्लॉक बनाते हैं ।
T 9806705657
U 7863751124
5490262369
9392885958
2210634430
4316978734
U
ब्लॉक के अंतिम दो गैर-बराबर अंक व्यक्तिगत रूप से एजेंट की व्यक्तिगत संख्या में दो बदलावों की चौड़ाई देने के लिए जोड़े जाते हैं, p
औरq
।
9 + 3 = 12 (पी, पहला ट्रांसपोज़ेशन चौड़ाई) 9 + 4 = 13 (क्यू, दूसरा ट्रांसपोज़ेशन चौड़ाई)
खंड T
के कॉलम को कॉपी करने के लिए U
ऊपर से नीचे, अंकों की एक नई पंक्ति में, अनुक्रमित और उपयोग करें V
।
T 9806705657
seqT 9804612537
U 7863751124
5490262369
9392885958
2210634430
4316978734
V 69911 56837 12548 26533 30206 13947 72869 49804 84323 75924
पहले p
अंक के लिए कुंजी प्राप्त करने के लिए पहले अंकों को अनुक्रमिक करें K1
, और q
दूसरे के लिए कुंजी के लिए निम्नलिखित अंक K2
।
First 12 6 9 9 1 1 5 6 8 3 7 1 2
K1 6 10 11 0 1 5 7 9 4 8 2 3
Next 13 5 4 8 2 6 5 3 3 3 0 2 0 6
K2 8 7 12 2 10 9 4 5 6 0 3 1 11
अंत में, U
प्राप्त करने के लिए ब्लॉक की अंतिम पंक्ति को अनुक्रमिक करें C
, स्ट्रैडलिंग चेकबोर्ड के लिए कॉलम हेडर:
U5 4316978734
C 3105968724
2. तेजस्वी चेकरबोर्ड
पहले, मैं अपना उदाहरण बिसात दे दूंगा फिर उस तरीके से इसे बनाने के सिद्धांतों की व्याख्या करूँगा:
3 1 0 5 9 6 8 7 2 4
S E N A T O R I
2 B D G J L P U W Y .
4 C F H K M Q V X Z #
अक्षरों की पहली पंक्ति हमारा छोटा कीवर्ड है SENATORI
। आपका कीवर्ड डुप्लिकेट के बिना कोई भी स्ट्रिंग हो सकता है, लेकिन चूंकि यह आपके चेकबोर्ड की शीर्ष पंक्ति को परिभाषित करता है, इसलिए बुद्धिमानी से चुनें। कीवर्ड के ऊपर है C
, और अन्य पंक्तियाँ आपके वर्णमाला के बाकी हैं जो भी आप चुनते हैं। मेरे मामले में, मैंने बाकी लैटिन वर्णमाला, विराम चिह्न .
और सीमांकन संख्याओं के लिए एक निशान के साथ बिसात भर दी #
। अनिवार्य रूप से, बिसात एक फैंसी स्थानापन्न सिफर है। उदाहरण के लिए, "ई" के साथ प्रतिस्थापित किया जाएगा 1
, और "डब्ल्यू" के साथ प्रतिस्थापित किया जाएगा27
।
एक बार जब हमने इस चेकबोर्ड के साथ अपने प्लेनटेक्स्ट मैसेज को इनकोड कर लिया है, लेकिन सबसे पहले, हमें अपने संदेश की शुरुआत को एक यादृच्छिक स्थिति में विभाजित करके कम स्पष्ट करने की आवश्यकता है, और यह सभी अपरकेस बना सकता है। दूसरी मूल शुरुआत को निरूपित करने के लिए, हम दो पूर्ण विरामों का उपयोग करते हैं..
We are discovered. Take what you can. Burn everything else. Move to Safehouse Foxtrot 3.
हो जाता है
HING ELSE. MOVE TO SAFEHOUSE FOXTROT#3#.. WE ARE
DISCOVERED. TAKE WHAT YOU CAN. BURN EVERYT
हम चेकबोर्ड के साथ सांकेतिक शब्दों में बदलना, हमें दे:
407020 1293124 496481 96 354114062831 416479869443442424 271 581
2173436481812124 95451 274059 22628 435024 232880 14818229
यदि संदेश की लंबाई 5 से विभाज्य नहीं है, तो हम संदेश को पैड करने के लिए कुछ अशक्त वर्ण जोड़ते हैं। हमारा संदेश 109 अंक लंबा है, इसलिए मैं एक नल जोड़ूंगा: "4"।
40702 01293 12449 64819 63541 14062 83141 64798 69443 44242 42715
81217 34364 81812 12495 45127 40592 26284 35024 23288 01481 82294
नोट: चूँकि मेरे उदाहरण संदेश में संख्याएँ नहीं हैं, इसलिए मैं यहाँ कहूँगा कि आप इसका उल्लेख कर सकते हैं, जैसा कि यहाँ बताया #3#
गया 44344
है।
3. पहला ट्रांसपोजिशन
ट्रांसपोज़ेशन टेबल K1
(इंटरमीडिएट कीज़ सेक्शन से) लिखकर उसके बाद पिछले स्टेप से एन्कोड किए गए मैसेज को उसी लंबाई की पंक्तियों में कुंजी के नीचे बनाएँ :
K1 6 10 11 0 1 5 7 9 4 8 2 3
4 0 7 0 2 0 1 2 9 3 1 2
4 4 9 6 4 8 1 9 6 3 5 4
1 1 4 0 6 2 8 3 1 4 1 6
4 7 9 8 6 9 4 4 3 4 4 2
4 2 4 2 7 1 5 8 1 2 1 7
3 4 3 6 4 8 1 8 1 2 1 2
4 9 5 4 5 1 2 7 4 0 5 9
2 2 6 2 8 4 3 5 0 2 4 2
3 2 8 8 0 1 4 8 1 8 2 2
9 4
उनकी संख्या के क्रम में गिने हुए कॉलम लेना
060826428 246674580 151411542 246272922 961311401 082918141
4414434239 118451234 334422028 293488758 0417249224 794943568
4. दूसरा स्थानान्तरण
पहला वाष्पोत्सर्जन अपेक्षाकृत सरल था। हालांकि, यह एक बाधित व्यवधान है। विघटन पैटर्न तालिका की चौड़ाई और कुंजी द्वारा निर्धारित किया जाता है। हमारे उदाहरण में, हमारे पास 110 अंक और 13 कॉलम हैं, जिसका अर्थ है कि हमारी 8 पूर्ण पंक्तियाँ और 6 बचे हुए हैं। हम पहली पंक्ति में भरना शुरू करते हैं, लेकिन कॉलम 0 पर रुकते हैं, और निम्नानुसार जारी रखते हैं:
K2 8 7 12 2 10 9 4 5 6 0 3 1 11
0 6 0 8 2 6 4 2 8 stop at 0
2 4 6 6 7 4 5 8 0 1 continue in a triangle pattern
5 1 4 1 1 5 4 2 2 4 6
2 7 2 9 2 2 9 6 1 3 1 1
4 0 1 0 8 2 9 1 8 1 4 1 4 until the end
4 1 4 4 3 4 2 3 9 1 1 restart and stop at 1
8 4 5 1 2 3 4 3 3 4 4 2
2 0 2 8 2 9 3 4 8 8 7 5 8
0 4 1 restart and stop at 2
फिर हम शेष अंकों के साथ अंतिम कुछ रिक्त स्थान भरते हैं।
K2 8 7 12 2 10 9 4 5 6 0 3 1 11
0 6 0 8 2 6 4 2 8 7 2 4 9
2 4 6 6 7 4 5 8 0 1 2 2 4
5 1 4 1 1 5 4 2 2 4 6 7 9
2 7 2 9 2 2 9 6 1 3 1 1 4
4 0 1 0 8 2 9 1 8 1 4 1 4
4 1 4 4 3 4 2 3 9 1 1 9 4
8 4 5 1 2 3 4 3 3 4 4 2 3
2 0 2 8 2 9 3 4 8 8 7 5 8
0 4 1 5 6 8
अब, हम उसी तरह से कॉलम को पढ़ते हैं जिस तरह से हमने पहले ट्रांसपोजेशन के लिए किया था।
71431148 42711925 861904185 22614147 45499243 28261334 80218938
641701404 025244820 645224398 271283226 94944438 064214521
और 5 अंकों के समूहों में सब कुछ विभाजित करें:
71431 14842 71192 58619 04185 22614 14745 49924 32826 13348 02189
38641 70140 40252 44820 64522 43982 71283 22694 94443 80642 14521
5. संदेश को अंतिम रूप दें
अंतिम चरण हमारे यादृच्छिक संदेश पहचानकर्ता 47921
को संदेश में ही सम्मिलित करना है। कुंजी तिथि का अंतिम अंक 6
इंगित करता है कि समूह की दूरी अंत से होनी चाहिए।
71431 14842 71192 58619 04185 22614 14745 49924 32826 13348 02189 38641
70140 40252 44820 64522 43982 47921 71283 22694 94443 80642 14521
इस चुनौती के लिए नोट्स
- आपको न्यूनतम पांच इनपुट दिए गए हैं: संदेश, पत्र कीवर्ड, कुंजी वाक्यांश, दिनांक और एक व्यक्तिगत संख्या। आप दो अतिरिक्त इनपुट शामिल कर सकते हैं: यादृच्छिक संदेश पहचानकर्ता और संदेश को पैड करने के लिए आवश्यक नल, या आपका फ़ंक्शन अपने आप कुछ यादृच्छिक संख्या उत्पन्न कर सकता है।
- आप मान सकते हैं कि सभी इनपुट मान्य हैं, अंकों और अक्षरों की सही संख्या के साथ (5-अंक संदेश पहचानकर्ता, कुंजी वाक्यांश के लिए कम से कम 20 अंक, और इसी तरह)। आप यह मान सकते हैं कि आपके तार (संदेश और कीवर्ड) में पहले से ही उन सभी को छोड़कर सभी विराम चिह्नों और रिक्त स्थान हैं, जिन्हें आप अपने संस्करण में अनुमति देते हैं, और संख्याएँ पहले से ही संख्या चिह्नों के साथ सीमांकित हैं।
- पहले कीवर्ड में डुप्लिकेट अक्षर नहीं होने चाहिए, और आपके कोड में, आप मान सकते हैं कि इसमें कभी भी डुप्लिकेट अक्षर नहीं हैं।
- आप जिस भाषा में एनकोड करने के लिए उपयोग करते हैं वह मायने नहीं रखती है, जब तक कि भाषा preexisting है, वर्णमाला preexisting है, और आप निर्दिष्ट करते हैं कि आप अपने उत्तर में किस भाषा का उपयोग करते हैं।
- आप जिस भी वर्णमाला को अपने तेजस्वी चेकरबोर्ड के लिए नियोजित करते हैं, आप चेकरबोर्ड को बाहर पैड करने के लिए प्रतीकों को जोड़ या हटा सकते हैं। निर्दिष्ट करें कि आप उन प्रतीकों का क्या उपयोग करते हैं (उदाहरण के लिए, विराम चिह्न, एक अलग "संदेश शुरू" प्रतीक, सामान्य शब्दों के लिए प्रतीक)। आप नंबर साइन को पूरी तरह से छोड़ सकते हैं और नंबर को स्पेल कर सकते हैं या चेकरबोर्ड में प्रत्येक अंक को शामिल कर सकते हैं, स्लॉट का उपयोग करके जहां नंबर साइन कुछ और के लिए था। कृपया निर्दिष्ट करें कि आपने अपने उत्तर में किस चेकबोर्ड का उपयोग किया है।
- आउटपुट या तो अंतरिक्ष-पृथक पांच-अंकीय समूहों, पांच-अंकीय पूर्णांकों की सूची या कुछ इसी तरह का होना चाहिए।
- मैंने शून्य-अनुक्रमण का उपयोग किया और
0123456789
अपने उदाहरण में।1234567890
जब तक आप निर्दिष्ट करते हैं कि आप अपने उत्तर में 1-अनुक्रमण और , या किसी अन्य प्रणाली का उपयोग कर सकते हैं।
यहाँ Ideone पर एक उदाहरण कार्यान्वयन है ।
यह एक लंबी पोस्ट है और मैंने इसे ज्यादातर हाथों से लिखा है, इसलिए यदि इस पोस्ट में कोई भी भ्रमित करने वाले भाग हैं या मेरी गिनती और ट्रांसपोज़िंग में त्रुटियां हैं, तो कृपया मुझे बताएं। गुड लक और गुड गोल्फिंग!
without borrowing
और without carrying
? क्या आपका मतलब है जोड़ने और घटाना mod 10
, यानी (6+7) mod 10 = 3
और (6-8) mod 10 = 8
?
adding the first two digits without adding
क्या आप ले जाने का मतलब है?