Daha şiddetli dört kare şifre


17

Arka fon

Yüz on üç yıl önce, amatör kriptograf Félix Delastelle , 25 harfli bir alfabenin iki permütasyonunu anahtar olarak kabul eden ve bu harflerden oluşan mesajları kodlayan dört köşeli bir şifre olan dört kare şifreli çalışmalarını yayınladı .

Çoğu kalem-kağıt şifresi gibi, dört-kare şifrenin bugün herhangi bir şifreleme değeri yoktur, ancak buluşu sırasında monografik muadillerine göre önemli bir avantajı vardır.

Yüz on üç yıl sonra Alice Delastelle, alfabenin boyutunu ve anahtar sayısını artırarak dört kare şifreyi geliştirmeye karar verir. [kaynak belirtilmeli]

Anahtar kurulumu

Alfabe aşağıdaki karakterleri içerir (boşluktan başlayarak):

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

Bir geçiş cümlesi verildiğinde, bu alfabenin bir permütasyonunu aşağıdaki gibi inşa ederiz:

  1. Her karakterin yalnızca ilk oluşumunu sakla.

  2. Kullanılmayan karakterleri alfabeden doğal sıralarına ekleyin.

Dört geçiş ifadesini dört tuşa çevirdikten sonra, her anahtarı bir kenar uzunluğu 7 karesine böleriz ve ortaya çıkan dört kareyi büyük bir kare oluşturacak şekilde düzenleriz.

Örneğin, geçiş ifadeleri

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

anahtarlar şu şekilde inşa edilir ve düzenlenir:

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

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

Şifreleme

Gibi bir düz metin mesajı verildi

ALICE LOVES BOB.

uzunluğunu eşitlemek ve karakter çiftlerine bölmek için 0 veya 1 boşluk ekliyoruz:

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

Her karakter çifti için ilk karedeki ilk karakteri (okuma sırası) ve ikincisini dördüncü sırada buluruz.

Ardından, kalan dört karedeki karakterleri, seçilen dört karakter, kenarları karelerin kenarlarına paralel olan bir dikdörtgen oluşturacak şekilde seçeriz.

Son olarak, karakter çiftini ikinci ve üçüncü karenin seçilen karakterleri ile değiştiriyoruz.

Örnek dizemiz için bu,

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

aşağıdaki şifre metniyle sonuçlanır:

PPA@E YTZEEH=T<-

Görev

Dört geçiş ifadesini ve bir düz metni kabul eden, şifrelemek için dört kareli şifrenin yukarıdaki varyantını kullanan ve ortaya çıkan şifreleme metnini döndüren bir program veya işlev yazın.

Detaylar:

  • Beş giriş dizesi yalnızca belirtilen alfabe karakterlerinden oluşacaktır.

  • Beş giriş dizesi herhangi bir sırayla okunabilir, örneğin yeni satırlarla sınırlandırılmış tek bir dize veya beş dizeden oluşan bir dizi olarak.

  • Dizelerin hiçbirinin boş olmadığını varsayabilirsiniz.

  • Çıktı tek bir dize olmalıdır.

    Çıkışı STDOUT'a yazdırmayı seçerseniz, yalnızca şifre metninin karakterlerini ve (isteğe bağlı olarak) bir satırsonu satırını yazdırabilirsiniz.

  • Standart kuralları geçerlidir.

Test senaryoları

Tüm test durumlarında, ilk dört dize okuma düzenindeki anahtar karelere ve düz metne son giriş dizesine karşılık gelir.

Giriş

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

Çıktı

PPA@E YTZEEH=T<-

Giriş

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

Çıktı

LALLR)#TROKE !

Giriş

,'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!

Çıktı

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

Giriş

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

Çıktı

GOOD LUCK, HAVE FUN.

Yanıtlar:


4

CJam, 52 50 49 47 46 44 bayt

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

Giriş sırası satırlardır 5, 2, 3, 1, 4. Çevrimiçi deneyin .

(@ MartinBüttner sayesinde -1 bayt, @Dennis sayesinde -2 bayt)

açıklama

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

Endeksler için, en az önemli basamakları (taban 7) değiştirmek istiyoruz. Örneğin, ilk örnek için ALsırasıyla indeksler 4ve 7sırasıyla 1 ve 4 tuşlarında. Baz 7'de bu [0 4]ve [1 0]. En az anlamlı basamak Değişim verir [0 0]ve [1 4]örneğin, 0ve 11ve bu karşılık gelir Pve Psırasıyla şifreler 2 ve 3'te.

Ancak, temel dönüştürme yerine kod şunları yapar:

[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

Pyth, 74 71 bayt

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

Muhtemelen çok optimize edilebilir. Çok fazla sıkıştırma kullanıyorum.

Girdileri şu sırayla alır:

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

Girdi sırası fikrinizi çalabilir miyim?
Maltysen

@Maltysen Tabii.
orlp

4

Pyth - 88 86 83 78 76 75 72 bayt

@Orlp sayesinde 8 bayt kaydedildi .

Waaay çok uzun, bundan oldukça mutsuzum, ama sadece kareleri ele almanın daha iyi bir yolunu ararken yayınlıyorum.

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

Burada çevrimiçi deneyin .


Sen yerini alabilir c+e.z*%le.z2d2ile C.tce.z2d. Sorma :)
orlp
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.