एक भयंकर चार-वर्ग सिफर


17

पृष्ठभूमि

एक सौ-तेरह साल पहले, शौकिया क्रिप्टोग्राफर फ़ेलिक्स डेलास्टेल ने चार-वर्ग सिफर पर एक काम किया था , जो एक पचाने वाला प्रतिस्थापन संचय है जो 25-अक्षर वर्णमाला के दो क्रमपरिवर्तन को कुंजी के रूप में स्वीकार करता है और उन पत्रों से मिलकर संदेशों को एन्कोड करता है।

अधिकांश पेन-एंड-पेपर सिफर की तरह, चार-वर्ग सिफर का आज कोई क्रिप्टोग्राफ़िक मूल्य नहीं है, लेकिन इसके आविष्कार के समय, इसके मोनोग्राफिक समकक्षों पर इसका एक महत्वपूर्ण लाभ था।

एक सौ-तेरह साल बाद, ऐलिस डेलास्टेल ने वर्णमाला के आकार और कुंजियों की संख्या बढ़ाकर चार-वर्ग साइफर में सुधार करने का फैसला किया। [प्रशस्ति पत्र की जरूरत]

कुंजी सेटअप

वर्णमाला में निम्नलिखित वर्ण शामिल हैं (अंतरिक्ष से शुरू):

 !"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ

पास वाक्यांश को देखते हुए, हम इस वर्णमाला के क्रमांकन का निर्माण इस प्रकार करते हैं:

  1. प्रत्येक चरित्र की केवल पहली घटना रखें।

  2. अप्रयुक्त वर्णों को उनके प्राकृतिक क्रम में वर्णमाला से जोड़ दें।

चार पास वाक्यांशों को चार कुंजी में बदलने के बाद, हम प्रत्येक कुंजी को साइड 7 की एक वर्ग में विभाजित करते हैं और चार परिणामी वर्गों को व्यवस्थित करते हैं ताकि वे एक बड़े वर्ग का निर्माण करें।

उदाहरण के लिए, यदि पास वाक्यांश थे

PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!

चाबियों का निर्माण और व्यवस्था इस तरह की जाएगी:

PROGAMI  POULARI
N UZLES  TY CNES
&CDF!"#  &DBWG!"
$%'()*+  #$%'()*
,-./:;<  +,-./:;
=>?@BHJ  <=>?@FH
KQTVWXY  JKMQVXZ

CORET H  DON'T E
SBAYPL!  LV!"#$%
"#$%&'(  &()*+,-
)*+,-./  ./:;<=>
:;<=>?@  ?@ABCFG
DFGIJKM  HIJKMPQ
NQUVWXZ  RSUWXYZ

एन्क्रिप्शन

जैसे एक सादे संदेश को देखते हुए

ALICE LOVES BOB.

हम इसकी लंबाई बनाने के लिए 0 या 1 स्थान जोड़ते हैं और इसे वर्ण जोड़े में विभाजित करते हैं:

["AL" "IC" "E " "LO" "VE" "S " "BO" "B."]

प्रत्येक वर्ण जोड़ी के लिए, हम पहले वर्ग में पहला वर्ण (रीडिंग ऑर्डर) और चौथे में दूसरा पाते हैं।

फिर, हम शेष वर्गों में पात्रों का चयन करते हैं, जैसे कि चार चयनित वर्ण एक आयत बनाते हैं, जिनके किनारे वर्ग के किनारों के समानांतर होते हैं।

अंत में, हम चरित्र जोड़ी को दूसरे और तीसरे वर्ग के चयनित पात्रों द्वारा प्रतिस्थापित करते हैं।

हमारे उदाहरण स्ट्रिंग के लिए, यह पैदावार देता है

["PP" "A@" "E " "YT" "ZE" "EH" "=T" "<-"]

निम्नलिखित सिफरटेक्स्ट में परिणामी:

PPA@E YTZEEH=T<-

कार्य

एक प्रोग्राम या फ़ंक्शन लिखें जो चार पास वाक्यांशों और एक सादा पाठ को स्वीकार करता है, इसे एन्क्रिप्ट करने के लिए चार-वर्ग सिफर के उपरोक्त संस्करण का उपयोग करता है और परिणामस्वरूप सिफरटेक्स्ट देता है।

विवरण:

  • पाँच इनपुट स्ट्रिंग्स में केवल वर्णमाला के वर्ण शामिल होंगे।

  • पांच इनपुट स्ट्रिंग्स को किसी भी क्रम में पढ़ा जा सकता है, जैसे कि, एक सिंगल स्ट्रिंग को न्यूलाइन द्वारा या पांच स्ट्रिंग्स की एक सरणी के रूप में।

  • आप मान सकते हैं कि कोई भी तार खाली नहीं है।

  • आउटपुट एकल स्ट्रिंग होना चाहिए।

    यदि आप आउटपुट को STDOUT में प्रिंट करना चुनते हैं, तो आप केवल सिफरटेक्स्ट के अक्षर और (वैकल्पिक रूप से) एक अनुगामी न्यूलाइन प्रिंट कर सकते हैं।

  • मानक नियम लागू होते हैं।

परीक्षण के मामलों

सभी परीक्षण मामलों में, पहले चार तार पढ़ने के क्रम में मुख्य वर्गों के अनुरूप होते हैं और अंतिम इनपुट स्ट्रिंग के समतल तक होते हैं।

इनपुट

PROGRAMMING PUZZLES & CODE GOLF
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE
DON'T TELL EVE!!!
ALICE LOVES BOB.

उत्पादन

PPA@E YTZEEH=T<-

इनपुट

 !"#$%&'()*+,-./:;<=>
 !"#$%&'()*+,-./:;<=>?@ABCDE
 !"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKL
 !"#$%&'()*+,-./:;<=>?@ABCDEFGHIJKLMNOPQRS
HELLO, WORLD! 

उत्पादन

LALLR)#TROKE !

इनपुट

,'K AB-Q=?@("W$>XM).C#<I:G!OLP*+;SZJTU%NED/&VFHRY
:,-D$C<SU=IYHFVA;! JG/M&L+WT%#.Q@(N*R")EZOBKX?'>P
L()JX,BND?Z<>P*FU%=O@&KIC+A!Y:;$SWHR.EMG'/T"QV #-
<->CI")AP Q:+U;O/F(KH&ER!MW?X'VJLZ#.$,BSGN@TD%*Y=
SPIN THE PPCG WHEEL OF BLAME!

उत्पादन

#>TE,VK+,ZQ(&<F@RA.NL@DM%NAC&>

इनपुट

& %(,-#)$@?/=>'*"<:;!.+
=/$- ?;',@#!(&<")%.:>+*
&%-/<?.;$'#:=!( ,>"+*)@
=,<-*?#.'@/;>%!+:(& ")$
HNRA#JX$H %JAV+"GTS,

उत्पादन

GOOD LUCK, HAVE FUN.

जवाबों:


4

सीजाम, 52 50 49 47 46 44 बाइट्स

l2/qN/'[,32>A,s-f|2/f{~@S+2<.#_7f%_W%.m.m.=}

इनपुट ऑर्डर लाइनें है 5, 2, 3, 1, 4इसे ऑनलाइन आज़माएं

(-1 बाइट @ मार्टिनबटनर को धन्यवाद, -2 बाइट्स @ डेनिस को धन्यवाद)

व्याख्या

l2/           Read the message and split into chunks of 2
qN/           Read rest of input and split by newlines (pass phrases)
'[,32>        Generate " !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ"
A,s-          Remove digits 0123456789
f|            Setwise OR with each pass phrase to remove duplicates, giving keys
2/            Split keys into two pairs
f{ ... }      For each message chunk...
  ~             Unwrap key pairs
  @S+2<         Add a space to the message chunk then cap to length 2
  .#            Find the two chars in keys 1, 4
  _7f%          Copy indices and perform modulo 7 on both
  _W%           Copy and reverse
  .m.m          Vectorised subtraction twice
  .=            Apply both indices to keys 2, 3

सूचकांकों के लिए, हम कम से कम महत्वपूर्ण अंकों को स्वैप करना चाहते हैं, आधार 7. उदाहरण के लिए, पहले उदाहरण के ALलिए सूचकांक 4और 7क्रमशः 1 और 4 कुंजी में हैं। बेस 7 में, यह है [0 4]और [1 0]। कम से कम महत्वपूर्ण अंक गमागमन देता है [0 0]और [1 4], यानी 0और 11, और को यह मेल खाती है Pऔर Pक्रमश: कुंजी 2 और 3 में।

हालांकि, बेस कंवर्टिंग के बजाय, कोड निम्नलिखित करता है:

[4 7]     A: Initial indices
[4 0]     B: Indices mod 7
[0 4]     C: Reverse of B

[4 -4]    B-C
[0 11]    A-(B-C)

6

पायथ, 74 71 बाइट्स

L+%eb7*7/hb7Jcms+oxdN{d--CMr33 91`MTd.z2ssm@VeJ,ydy_dCmxLhdedC,hJ.tcz2d

शायद बहुत कुछ अनुकूलित किया जा सकता है। मैं बहुत जिपिंग का इस्तेमाल करता हूं ।

निम्नलिखित क्रम में इनपुट लेता है:

ALICE LOVES BOB.
PROGRAMMING PUZZLES & CODE GOLF
DON'T TELL EVE!!!
POPULARITY CONTESTS & CODE BOWLING
CORRECT HORSE BATTERY STAPLE

क्या मैं आपका इनपुट ऑर्डर आइडिया चुरा सकता हूं?
माल्टीसेन

@ माल्टीसेन ज़रूर।
orlp

4

पायथ - 88 86 83 78 76 75 72 बाइट्स

8 बाइट्स @orlp की बदौलत बच गए

वाया बहुत लंबा, मैं इससे बहुत दुखी हूं, लेकिन मैं इसे पोस्ट कर रहा हूं जबकि मैं चौकों को संभालने के लिए बेहतर तरीके की तलाश कर रहा हूं।

Jm+oxdN{d-+d-CMr33 91`MTd.zsms@VtPJ,+*7hKs.DR7xV,hJeJdeK+*7@K2@K1C.tcz2d

इसे यहाँ ऑनलाइन आज़माएँ


आप बदल सकते हैं c+e.z*%le.z2d2के साथ C.tce.z2d। मत पूछो :)
orlp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.