Herbern cryptanalysis, plain known, using tables


Home Page
Hebern's machines Home Page
Hebern 1 rotor Home Page
Cryptanalysis, Home Page

Introduction

From a cryptogram whose plain text is known, it is always possible to create the encryption table which then allows any message to be deciphered. The only small problem is that it is more or less simple to reconstruct the permutations used by the Hebern 1 rotor machine which made it possible to generate the cryptogram.

Only the rotor is unknown

Reconstruction of the encryption table

Create the cryptogram:

C:\H1_TOOLS> type MSGS\p100.pln
THEREARENOBORNDECISIONMAKERSWHETHERWELIKEITORNOTMAKINGACHOIC
EISAPARTOFBEINGHUMANANDWEDONOTTHINKTOOHIGHLYOFTHOSEWHOTHROWA
WAYTTASRIGHTESTHERBYHAVINGSOMEONEELSEMAKEUPTHEIRMINDSFORTHEM
ORBYTAKINGSOMUCHTIMEMAKINGADECISIONTHATISISTOOLATETOACTNOTTO
DECIDEISADECISIONNOTTODECIDEHEREARETWOMETHODSOFAPPROACHINGTH
EDECISIONMAKINGPROCESSTHEFIRSTISTHATTHEMOSTSUCCESSFULDECISIO
NMAKERSFOLLOWASETOFRULESTHATHELPTHEMSELECTTHEBESTALTERNATIVE
UNDERTHECIRCUMSTANCESTHESEBASICRULESOFDECISIONMAKINGINVOLVES
SIXSTEPSFIRSTSTATETHEAPPARENTPROBLEMORSITUATIONYOUFACESECOND
GATHERTHEFACTSTHIRDORGANIZEANDINTERPRETTHESEFACTSFOURTHSTATE
THERNBSPROBLEMORSITUATIONINWRITINGFIFTHDEVELOPALTERNATIVESOL
UTIONSANDSIXTHSELECTTHEMOSTAPPROPRIATEALTERNATIVETHESECONDME
THODOFAPPROACHINGTHEDECISIONMAKINGPROCESSISQUITETHEOPPOSITEH
EREARESIXTEENWAYSTODODGEDECISIONSONETAKEFLIGHTINTODETAILSTWO
COUNSELINFINITEDELAYOFACTIONTHREEDELEGATETHEPROBLEMTOACOMMIT
TEEFOURLOOKFORTHEANSWERINTHEBOOKFIVEINDUCETHEBOSSTOCOMMITHIM
SELFONHOWTOHANDLETHEPROBLEMSIXGIVEANANSWERINDOUBLETALKSEVEND
ELEGATETHEPROBLEMTOASUBORDINATEEIGHTINDICATETHATALLPROBLEMSM
USTBECONSIDEREDINSERIALORDERNINEHAVEASTUDYMADETOGETALLTHEFAC
TSTENARRANGETOBECALLEDOUTOFTOWNELEVENCALLINANEXPERTTOMAKESUR
EWEREONSOLIDGROUNDTWELVEDENYTHATANYPROBLEMEXISTSTHIRTEENTAKE
FLIGHTINTOILLNESSFOURTEENTAKEFLIGHTINTOTHEBOTTLEFIFTEENSTATE
THEPROBLEMBELONGSINSOMEONEELSESPROVINCESIXTEENSIMPLYPUTONONE
SHATANDGOHOME


C:\H1_TOOLS> python hebern1_tui.py -R c5 
	< MSGS\p100.pln > MSGS\p100_1.cry

C:\H1_TOOLS> python groupe.py < MSGS\p100_1.cry
RBLHY VFBMC YBUSN CNVWX IHGOE HBQCL YZTBE RFHYY PWTJR UIUGO
EXZVR XEMJC NSJXE MMNHB ZSZHX AFJFO RVSLI HKJUM OXEEP XVDWL
XALMP MSLZG IZZCW SUDAS FKGCF ZTSPB WJLRH QIXBN RXKHC FMJFS
IHJTL CXYRW YHOYZ QTISH COMBV VFYJM XZQLS DLULS XCIPD XIWDD
FYDLN JGUXF MRRML YZAWG LHZNH JOYFR LLGRR OWPHM DBGSP WYNBO
UANPZ ONRXE RGYTJ UDBZQ GWJKP NFJFS FYSIA AAPZA QMHCZ SBQOX
POUAN PZONM GKCOA AQMWB XHWSM QEYMX NPFYW BDOXY WRHGZ CGQJV
PJYOU ANPZO NMGKX CIZZT VNPAJ WODDY YCAPF YWBCH IXSLY WYBJQ
LMOXP JUSQY GUJSK NRIJT AYDBE KRWDH MMYPW CQHIT AEWZI TWVYA
GWNHM NFVBD SXBLS RQNOI FGRYK NJOFV LHUHT DEPSL DKDCR PSTHQ
IPDVE IMSII GJZEK BSSAX RTRPR MLTKX XXDOZ CNJIZ LZLAV ZRBLZ
TRGFI PTIVD MFIGN KKZNI PWRZP AQEGY ZQJWP MKNMB VGOUK KDNRZ
SLYNL VXVGB NRPBH LWXFM WBPAZ IFJQU GAMYX GPAGO UEAEI TWFDH
BORPR AIFKB NMYDC HIGCP ZILAA HIZVP HQIKK HWXEG MRKLN YFRWF
DHBOR PRAIY ZQJWD DCODD QMIJS WGQHC WDJQJ DHKRW VOKWM VVUTZ
RDKBH CWXYG YAXDN GOOID UJEJI EBBVO XCLDQ EYASK FWAWB KMXVZ
IJXTS HTIIF ZYYNM QWXGO DQOUU CZHLL SHRPM MOZNN GCNTL OYWQB
NUZUJ IVPFL WZTRG AKJWS UOPOU CATQU JBCHH CWUDE XYKAL BSZEN
TDALI MDFXA OMWHH QIPMH DWUHC NVDZD IFUDT HCOYI JEGIN FUVLA
FMHPF XFYBM AHIMW VEMNY KPETV RPNVD EVIXA TQCCD AFIEH DUJJL
MKEEB JDRGR LOLKD ZJTXX IWNYE MMAGC KLVRG RGBXN DTEYQ XJDUK
FWYEG NOGCX YZLTD OFJRM DFFNB BFALZ OHTMA BIHTD SHBZY FXGIX
QAKBU LPYQV ISWZF TGCRT YNUVD BICOW OMYQT NALQQ LKDHZ PPHTY
PBICY WDMYQ UTVGF OUBXV ZZXTI ELCUB KGAMC CJWAV FUSMG KXQQH
YLIXN CBVTR EOCLV GCJLU VPUZY TXBGI UKETC GMRLC AHKIB KDCRB
MHHEI DIAAW PREFV XNUFO BFLWX QIZZH FYNQB MJYPV AVMMF LNBXE
WZEYH ZVBRS XMMOC HTKQS FYJYJ AQULE WEVNM YJGAN FBUJI SKSTT
AQBGJ FXRIF QEWWM SZWDW OIPML LKAZZ ILTZH DAYUS TZP

Create the encryption table:

C:\H1_TOOLS> python tb_pln_cry.py 
	MSGS\p100_1.cry MSGS\p100.pln
1 - Print cryptogram and plain text
2 - Choose the key (Z by default)
3 - Create generatrix
4 - Print generatrix
5 - Change mode (cipher or decipher [by default])
6 - Print ordered array
7 - Permute two columns of the ordered array
8 - Permute all columns of the ordered array
9 - Search columns fit
99- Quit
Choice ? 3
Choice ? 4
The Rotor Generatrix Tableau. Key:  Z
Coord of  Crypto  : Abscissa:  Plain  , ordinate: Position of rotor
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
 A- F  Q  T     X  A     W  C     O  I     Z  P  H     B  D  R     U
 B- P     F     Z  M  V  B  I        U  Y  O  G  X     C  Q  J  T        D  L
 C- R  E  V  Y  L     A     M        X     F  W  Z     P  I  S  Q  J  C
 D- D  U  X     T  Z  G  L  F     W  M  E  V  Y  A     H  R  P  I     J     N
 E- T  W  J  S  Y        E  R     L  D  U  X  Z        Q  O  H  A  I
 F- V     R  X  E        Q  U        T  W  Y  M  F     N  G  Z  H  A  L     B
 G- H     W  D  I     P  T  J        V  X  L     O     F  Y  G  Z  K  N
 H- P  V  C  H  B     S  I  A        W  K  D  N        X  F  Y        Z     T
 I- U  B  G  A  N  R  H  Z  Q        J     M  K  D     E  X  I        P  S
 J- A  F        Q     Y  P  S        B     J  C  V  D  W  H  K  X  O  R  E  N
 K- E  Y  L  P  F  X  O  R  T     A  K  I  B  U        G  J  W  N     D
 L- X           W     Q  S  G        H  A  T  B        I  V  M  P     L
 M- J  N  D  V  M  P        Y     G     S  A  T  E     U  L  O     K        C
 N- M        L  O  Q  E  X  H     Y  R  Z  S  D  G     K  N  A  J     W
 O- B     K  N  P  D     G  E        Y     C  F        M  Z  I  O     A  U
 P- S  J  M  O  C  V  F  D  W        Q  B  E  R  I     Y  H  N              K
 Q- I  L  N  B  U     C  V  O     P  A  D  Q  H  K     G  M  T  Y     F  J
 R- K  M  A  T  D  B  U  N  V        C  P  G  J  W     L  S  X     E
 S-    Z  S  C  A     M  U  N        O  F  I  V  E     R  W  Q  D           G
 T- Y  R  B  Z  S  L  T  M  X        E  H  U  D  J     V  P  C  G           I  K
 U- Q     Y     K  S  L  W  Z     D  G  T  C  I  P     O  B  F
 V- Z  X  Q  J  R        Y  L     F  S  B  H  O  T        E  U  M        I
 W- W     I     J  U  X  K  B     R  A  G  N  S        D  T  L     F
 X- O        I  T  W  J  A  D        F  M  R  L  Y     S  K  B        U
 Y- G        S  V        C  P     E  L  Q  K  X        J  A  D  F  T
 Z- N     R  U  H     B  O  X     K  P  J  W  A  Q     Z  C  E        V     M

The diagonals correspond to the identity permutation, they are all equal to ABC...Z. As a result, it is simple to reconstruct the entire table:

  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A F Q T G X A N W C J O I V Z P H Y B D R K U S L E M
B P S F W Z M V B I N H U Y O G X A C Q J T R K D L E
C R E V Y L U A H M G T X N F W Z B P I S Q J C K D O
D D U X K T Z G L F S W M E V Y A O H R P I B J C N Q
E T W J S Y F K E R V L D U X Z N G Q O H A I B M P C
F V I R X E J D Q U K C T W Y M F P N G Z H A L O B S
G H Q W D I C P T J B S V X L E O M F Y G Z K N A R U
H P V C H B O S I A R U W K D N L E X F Y J M Z Q T G
I U B G A N R H Z Q T V J C M K D W E X I L Y P S F O
J A F Z M Q G Y P S U I B L J C V D W H K X O R E N T
K E Y L P F X O R T H A K I B U C V G J W N Q D M S Z
L X K O E W N Q S G Z J H A T B U F I V M P C L R Y D
M J N D V M P R F Y I G Z S A T E H U L O B K Q X C W
N M C U L O Q E X H F Y R Z S D G T K N A J P W B V I
O B T K N P D W G E X Q Y R C F S J M Z I O V A U H L
P S J M O C V F D W P X Q B E R I L Y H N U Z T G K A
Q I L N B U E C V O W P A D Q H K X G M T Y S F J Z R
R K M A T D B U N V O Z C P G J W F L S X R E I Y Q H
S L Z S C A T M U N Y B O F I V E K R W Q D H X P G J
T Y R B Z S L T M X A N E H U D J Q V P C G W O F I K
U Q A Y R K S L W Z M D G T C I P U O B F V N E H J X
V Z X Q J R K V Y L C F S B H O T N A E U M D G I W P
W W P I Q J U X K B E R A G N S M Z D T L C F H V O Y
X O H P I T W J A D Q Z F M R L Y C S K B E G U N X V
Y G O H S V I Z C P Y E L Q K X B R J A D F T M W U N
Z N G R U H Y B O X D K P J W A Q I Z C E S L V T M F

The rotor wiring corresponds to the first line (FQT...).

Reverse rotor rebuild

It is possible to create the opposite table: on the abscissa the encrypted letter and on the ordinate the key. We obtain in the first line the wiring of the rotor... reverse!

C:\H1_TOOLS> python tb_pln_cry.py MSGS\p100.pln MSGS\p100_1.cry
1 - Print cryptogram and plain text
2 - Choose the key (Z by default)
3 - Create generatrix
4 - Print generatrix
5 - Change mode (cipher or decipher [by default])
6 - Print ordered array
7 - Permute two columns of the ordered array
8 - Permute all columns of the ordered array
9 - Search columns fit
99- Quit
Choice ? 3
Choice ? 4
The Rotor Generatrix Tableau. Key:  Z
Coord of  Crypto  : Abscissa:  Plain  , ordinate: Position of rotor
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
 A- F  R  I  S     A     P  L                 K  O  B  T     C  V     H  E     N
 B-    H  R  X     C  O     I  T     Y  F     N  A  S        U  L  G     P  M  E
 C- G     W     B  N        S  V     E  I        R  U  A  T        C  O  L  D  P
 D- P        A  M  I  G  R  U  W     H  L  Y     T     S     E  B  N  K  C  O  F
 E- U        L  H        T  V  C     K        S     R  I  D  A  M     B  N  E  O
 F- V  Y        E  P  S  U           W  O  R        H  C     L  I  A  M  D  N  T
 G-          D     R  T  A  E  I  V  N     W  P  G           H     L  C  M  S  U
 H- I  E  C  N     S     D  H     M        O     A        G  Y     B  L  R  T  W
 I- D  B     P  R     C  G  T  L  O     N  E     W  I  F  X     A        S     H
 J- A  L  O  Q  X  B     S     N  T        Y  V  H  E  W  I        P  R  U  G
 K- K  N     W  A  E  R     M  S  L  C     U  G  D     H     I  O     T  F  B
 L- M  O              I  L  R        W  T        U  G     H  N     S  E  A
 M- N     Y  C  P     K        A  V  S  E  B  T  F        M  O  R  D        I
 N- T        O  G     P  I     U  R  D  A  S  E     F  L  N           W  H  K  M
 O- W  A  N  F  I  O  H     T     C     R  D  U  E              X           L  S
 P-    M  E  H  N  G     S  P  B  Y     C  T  D     L  O  A        F  I     R
 Q- L  D  G  M     W  R  O  A  X  P  B  S  C  I  K  N        T  E  H        U
 R- C  F  L  E  V     N        O  A  R  B  H     M        S  D  G  I  P  T
 S- E     D  U  P  M  Y     N           G  I  L     T  R  C     H  O  S        B
 T-    C  T  O  L     U  M  Y  P  Z  F  H        S     B  E  G  N  R     I  A  D
 U-    S  N  K     T  L     O     E  G        R  P  A     F  M        H     C  I
 V-    M        S  K     N  X  D     I  U     O     C  E  L  P  T        B  H  A
 W- L  I     R     V  M     C  E  H  T     N           K  O  S  F     A  G
 X- H  T     I     L        D  G  S  O  M     A        N  R  E  W     F     P
 Y- S     H  T  K  U  A        R  N  L           I  M     D  V     E     O
 Z- O  G  S     T        E     M  K     Y  A  H  L  P  C        D  W  N  I     R
Choice ?

Note: Menu choice 5 allows you to move from the encryption table to the decryption table. This avoids restarting the program. An example is given in the following paragraphs.

Rotor and keyboard permutations are unknown

The key is Z

First, we create the cryptogram:

C:\H1_TOOLS> python hebern1_tui.py -R c5 -K LFS 
	< MSGS\p100.pln > MSGS\p100_2.cry

C:\H1_TOOLS> python groupe.py < MSGS\p100_2.cry
AUIKO ODFQC EBVHG HPQZI ILGNZ CGSJM OJVFA OJUCE ZKEJC XIKGN
ZMCNK WDMRU XNYRB BNVHH LPJLE FDJLI KFEAY IKSUN PRHWC BVDGW
EFBIP EUMZI YMJCX HVDVG SYKLS IPIUD IMIUF TYHUD KRAVE PLJFP
ILTKB GDYKG OZZOJ HSESV EDLHV ZSSTM XUFAU CKBJR BCIMG RDKDS
FFLWB QWODH DUPMJ OJEXY NVTVH JEFSE ULWKA IWZFM TFVNR VCCUD
MZGRJ OBDXY AGHRL BTFJH PVXLZ VSJFP SSSAO AMDQI SMAUJ NTZPR
ZDMZG RJOBM WBEIG ISMSF BFXHL IHOLB GRSSV WIPDY WUFIG UVHYK
WASDM ZGRJO BMWBD WEQZF ONYEY VPDLO TWWRS SVWLC HTUMO WQFDH
ANPRZ SMMTF PKTIP TALFR HUTFA GKVGV NXTPZ LHLRK OYIQE RTOQT
VMWUL CFAVS BIAWS DQTNL MSPUL NDJJK NVKJE SDRXW QHIGA DURFT
YQLXM ELHDU BJLJB BSIOM AJKZP MJEKK ZRGNT HPJNM MIUFA UAUIQ
MCCVR BSEFD NPJVG SBIBA UXAQY ISGCO JHYVW BQVLH VCRKA HITAQ
UMOXJ PBXPB JGZBH TZISU VWUAC LMBSB CTQUZ YWQYD MGWJI MVYIC
GIKZP YYVKV WNCDE JJVUR JQUFO CHQTZ FTYKK FXRBJ NRYTG FSEVY
ICGIK ZPYYO JHYVG DEDDS TEIYS VWSKW WCLTR ATGKV FNQKL QVXTI
XXPDK WWWOI QTBWW YPNDQ MJDGI XOWAP DWICS GQTGG JVYPU LLBVM
IYEKC COLEN ZUQNQ HXRRN LIZOO LJLUL CCADD AWJKN VCWGN NSKOH
GXJKT AAQLA WQMCC TKSXH VNZDM WWAHK TWLCK WWDNG XOKEA BSZHV
ESWKI UQYXA NEWKF TYQQF QVVVE VASLD IVYXK CEIHP LGCWX AUKNQ
FXHPF ISSOM OCHEW FDMKO KBMGF GZVAS DZIZM KQGEF GNXGA ASSYC
LLHWV JQYPE UNBBQ QFRRQ YLXUM NLQYH YTVYP EGWXT QJRYS QRASG
JVCFY VZVUI DIUKI PLMKA NHDNU VJANZ IJEKW NILPX CCGQH NRIYH
FECBV XZOOQ NPGIN KWGAJ HOUOT FRCHV PBSIE CWKHF UHICC DYKMU
BFRCE VGBSI MNVCS OYWXL CQZRX GJUSV CYYBE HNRWZ SKSMW BDSSK
OAYHX CTKTG HDWTV CZYUG AQZQH RRPCW SGMGH JNRIW WHBQO HIGAU
DKFGY AREOV WGHPA BGXSO OYBXD SEQZZ DOXHT NXEZA KQYES WBWXY
IQRYF JOFON ZNLNE JEYTP SSTES AFXIE TGONQ UYYYC FBMJN PBTPK
OSGGF NRCYV FZXVL HTKDR EQVUU LPACQ EMMJA AZUUH TZZ

We create the encryption table:

C:\H1_TOOLS> python tb_pln_cry.py MSGS\p100_2.cry MSGS\p100.pln
1 - Print cryptogram and plain text
2 - Choose the key (Z by default)
3 - Create generatrix
4 - Print generatrix
5 - Change mode (cipher or decipher [by default])
6 - Print ordered array
7 - Permute two columns of the ordered array
8 - Permute all columns of the ordered array
9 - Search columns fit
99- Quit
Choice ? 3
Choice ? 4
The Rotor Generatrix Tableau. Key:  Z
Coord of  Crypto  : Abscissa:  Plain  , ordinate: Position of rotor
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
 A- L  F  O     D  M     I  E     N  H     C  P  K     G  Q  A     Z
 B- D     H     Q  E  N  U  L        X  Y  I  G  T     W  S  M  J        F  A
 C- K  R  T  H  I     G     D        Z     M  W  Q     Y  E  U  S  F  J
 D- C  D  W     R  Q  S  M  N     G  A  E  F  Y  I     K  U  Z  P     B     O
 E- M  T  L  E  O        D  P     K  N  U  R  Z        S  W  F  H  X
 F- O     C  Q  G        T  B        F  W  U  M  H     X  I  J  Z  Y  A     P
 G- A     S  T  Y     B  V  R        O  X  J     Z     D  Q  C  G  L  K
 H- Q  P  U  I  F     R  W  T        L  K  A  N        H  V  O        M     E
 I- S  U  V  Z  X  O  T  J  F        D     Q  K  L     A  B  R        Y  G
 J- E  A        H     U  B  N        V     S  C  X  W  M  F  G  K  J  O  Z  D
 K- M  E  A  R  J  Z  H  K  S     O  C  I  T  U        P  Y  X  W     Q
 L- R           V     Z  H  Y        U  A  G  B        E  K  N  M     C
 M- X  J  G  F  L  W        C     R     S  Y  T  B     V  N  P     A        H
 N- B        X  N  I  F  R  V     E  G  Z  H  D  J     L  C  Q  A     P
 O- U     Q  G  Z  L     Y  H        S     E  F        N  T  D  I     V  K
 P- G  S  X  D  H  A  P  Q  K        I  B  W  R  U     O  J  V              L
 Q- J  I  P  V  M     W  A  Z     C  K  D  O  H  Y     B  L  E  T     S  N
 R- Y  K  Z  N  S  H  O  C  Q        W  P  V  J  R     T  M  B     G
 S-    L  B  U  W     Y  O  G        E  F  N  V  D     C  Z  T  Q           K
 T- F  Y  N  M  P  K  A  E  I        J  H  X  D  G     Z  R  L  C           Q  S
 U- H     D     B  X  M  G  J     L  P  T  Z  I  V     R  A  S
 V- I  Z  F  Y  E        S  W     V  T  B  L  O  M        X  K  U        Q
 W- V     R     T  Y  E  A  O     X  M  G  B  S        Q  P  U     N
 X- N        A  K  V  Q  F  X        Y  M  D  L  E     I  H  W        G
 Y- W        C  A        L  U     Z  B  Q  P  X        S  O  I  D  K
 Z- T     K  O  C     D  P  M     B  Q  J  X  A  S     U  G  Y        L     I
Choice ?

Here, the diagonals doesn't correspond to the alphabet. Due to the Keyboard permutation, the columns are mixed. They can be rearranged to complete the table. The program allows you to find adjacent columns. The best candidates correspond to the couples with the highest number of diagonals.

Choice ? 9
Note: don't use the ordered table
A-C (20), A-F (13), A-I (25), A-X (6),
B-D (10), B-F (7), B-H (14), B-K (4), B-M (11), B-O (14), B-P (12), 
B-S (15), B-T (15), B-U (9), B-V (4), B-W (10), B-X (5), B-Y (7),
C-F (9), C-H (20), C-K (9), C-U (15), C-W (11), C-X (5), C-Y (9),
D-F (10), D-G (14), D-K (8), D-N (19), D-O (18), D-P (13), D-U (12), 
    D-V (8), D-W (10), D-Y (8),
E-K (12), E-P (19), E-U (16),
F-G (10), F-K (7), F-L (13), F-M (10), F-S (14), F-U (9), F-V (5), 
    F-W (8),
G-L (18), G-P (14), G-V (9), G-W (9), G-X (6), G-Y (8),
H-M (19), H-V (10), H-W (13), H-X (5),
I-Y (10),

K-O (12), K-U (7), K-V (4), K-Y (6),
L-W (13), L-X (6), L-Y (10),
M-P (15), M-U (14), M-V (10), M-X (4), M-Y (7),
N-P (19), N-W (14), N-X (6),
O-U (15), O-V (9), O-W (13), O-X (6),
P-S (19), P-V (8), P-W (8), P-X (4), P-Y (8),

R-Y (10),
S-U (16), S-V (10), S-X (6),
T-V (10), T-Y (10),
U-W (8), U-Y (7),
V-W (7), V-Y (4),
W-Y (6),

The A-I pair is valid for 25 diagonals. We'll use it first. We therefore exchange columns B and I.

Choice ? 7
Columns to permute (return to exit)  ? (x,y) B,I
Choice ? 6
 A  I  C  D  E  F  G  H  B  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
------------------------------------------------------------------------------
 L  E  O     D  M     I  F     N  H     C  P  K     G  Q  A     Z
 D  L  H     Q  E  N  U           X  Y  I  G  T     W  S  M  J        F  A
 K  D  T  H  I     G     R        Z     M  W  Q     Y  E  U  S  F  J
 C  N  W     R  Q  S  M  D     G  A  E  F  Y  I     K  U  Z  P     B     O
 M  P  L  E  O        D  T     K  N  U  R  Z        S  W  F  H  X
 O  B  C  Q  G        T           F  W  U  M  H     X  I  J  Z  Y  A     P
 A  R  S  T  Y     B  V           O  X  J     Z     D  Q  C  G  L  K
 Q  T  U  I  F     R  W  P        L  K  A  N        H  V  O        M     E
 S  F  V  Z  X  O  T  J  U        D     Q  K  L     A  B  R        Y  G
 E  N        H     U  B  A        V     S  C  X  W  M  F  G  K  J  O  Z  D
 M  S  A  R  J  Z  H  K  E     O  C  I  T  U        P  Y  X  W     Q
 R  Y        V     Z  H           U  A  G  B        E  K  N  M     C
 X  C  G  F  L  W        J     R     S  Y  T  B     V  N  P     A        H
 B  V     X  N  I  F  R        E  G  Z  H  D  J     L  C  Q  A     P
 U  H  Q  G  Z  L     Y           S     E  F        N  T  D  I     V  K
 G  K  X  D  H  A  P  Q  S        I  B  W  R  U     O  J  V              L
 J  Z  P  V  M     W  A  I     C  K  D  O  H  Y     B  L  E  T     S  N
 Y  Q  Z  N  S  H  O  C  K        W  P  V  J  R     T  M  B     G
    G  B  U  W     Y  O  L        E  F  N  V  D     C  Z  T  Q           K
 F  I  N  M  P  K  A  E  Y        J  H  X  D  G     Z  R  L  C           Q  S
 H  J  D     B  X  M  G        L  P  T  Z  I  V     R  A  S
 I  W  F  Y  E        S  Z     V  T  B  L  O  M        X  K  U        Q
 V  O  R     T  Y  E  A        X  M  G  B  S        Q  P  U     N
 N  X     A  K  V  Q  F           Y  M  D  L  E     I  H  W        G
 W  U     C  A        L        Z  B  Q  P  X        S  O  I  D  K
 T  M  K  O  C     D  P        B  Q  J  X  A  S     U  G  Y        L     I
Choice ?

If we inspect the first two columns, we can see that the order alphabetical is well respected in the different diagonals: DE, KL, CD, MN, OP, AB, …

Getting started is the hardest part. For the future, we have two strategies:

  • We complete the reconstruction of the table by hand.
  • We continue to use the program.

Here is a manual rebuild after swapping the following columns: CF, ES, CX, GR, BT, KD, LN, JM, MK, LC, OH, EL, MP, BP, QV, JG, PY, QE, UW, QP, WQ, ZO, JO. We obtain the following table:

Choice ? 7
Columns to permute (return to exit)  ? (x,y) J,O
Choice ? 6
 A  I  F  B  S  X  R  Z  T  K  D  N  G  C  H  M  V  O  L  Y  Q  E  U  P  W  J
------------------------------------------------------------------------------
 L  E  M  F  Q     G     A  N     C     O  I     Z  P  H        D     K
 D  L  E     S  F  W     M        I  N  H  U  Y     G  X  A     Q  J  T
 K  D     R  E     Y     U     H  M  G  T        F  W  Z        I  S  Q  J
 C  N  Q  D  U     K     Z  G     F  S  W  M  E     Y  A  O     R  P  I  B
 M  P     T  W     S     F  K  E  R     L  D  U  X  Z  N        O  H
 O  B        I     X     J     Q  U     C  T  W  Y  M  F  P     G  Z  H  A
 A  R        Q     D     C     T  J  B  S  V  X  L     O        Y  G  Z  K
 Q  T     P  V     H     O     I  A  R  U  W  K     N  L  E     F        M
 S  F  O  U  B  G  A     R     Z  Q  T  V  J        K  D        X     L  Y
 E  N     A  F  Z  M     G        S  U     B     J  C  V  D  W  H  K  X  O
 M  S  Z  E  Y     P     X  O  R  T  H  A  K  I     U  C        J  W     Q
 R  Y        K     E     N        G  Z     H  A     B  U        V  M     C
 X  C  W  J  N     V     P  R  F  Y     G     S  A  T     H     L     B
 B  V  I     C     L     Q  E  X  H  F     R  Z     D  G        N  A  J  P
 U  H  L     T  K  N     D     G  E     Q  Y        F  S        Z  I     V
 G  K  A  S  J     O     V     D  W  P  X  Q  B     R  I  L     H     U
 J  Z     I  L  N  B     E  C  V  O  W  P  A  D     H  K        M  T  Y  S
 Y  Q  H  K  M     T     B     N  V  O  Z  C  P  G  J  W        S     R
    G     L  Z     C     T     U  N  Y  B  O  F     V  E  K     W  Q  D
 F  I  K  Y  R     Z  S  L     M  X  A  N  E  H     D  J  Q     P  C  G
 H  J  X     A     R     S  L     Z  M  D  G  T     I  P        B     V
 I  W     Z  X  Q        K  V  Y  L     F  S  B     O  T        E  U  M
 V  O  Y     P     Q     U  X     B  E  R  A  G  N  S  M        T
 N  X  V     H     I     W     A  D  Q     F  M     L  Y        K     E  G
 W  U        O     S     I  Z  C  P        L  Q  K  X  B        A  D
 T  M        G     U     Y  B  O  X  D  K  P  J     A  Q  I     C     S  L

This table is easily completed.

If we look at the permutations found, they correspond to those used to create the cryptogram... but shifted by three positions.

Rotor     :  FQTGXANWCJOIVZPHYBDRKUSLEM  (1st line)
Lampboard :  XAKHSZJLYWGPMIOURDBFTNVCQE
L reverse :  BSXRZTKDNGCHMVOLYQEUPWJAIF  (column heads)

Note: How to find adjacent columns? My program is very simple: We observe two columns and assume that they are adjacent. The diagonals (each limited to only two characters) must respect the limitations following:

  • The same letter cannot be doubled diagonally (eg: FF).
  • If one of the letters is used in the first column, the letter associated (in the second column) must be identical if the first letter appears in another diagonal (eg: FG and FT: the columns are not adjacent).
  • We can do the same reasoning for the second letter: if a letter appears in the second column... (ex: GF and TF: the columns are not adjacent).

The external key is known and different from Z

My program allows you to enter an external key (by default Z):

C:\H1_TOOLS> python hebern1_tui.py 
	-R =GADBOCTKNUZXIWHFQYJVPMELSR 
	-K =KXVMCNOPHQRSZYIJADLEGWBUFT -E G  
	< MSGS\p25.pln > MSGS\p25.cry

C:\H1_TOOLS> python tb_pln_cry.py MSGS\p25.cry MSGS\p25.pln
1 - Print cryptogram and plain text
2 - Choose the key (Z by default)
3 - Create generatrix
4 - Print generatrix
5 - Change mode (cipher or decipher [by default])
6 - Print ordered array
7 - Permute two columns of the ordered array
8 - Permute all columns of the ordered array
9 - Search columns fit
99- Quit
Choice ? 2
Current value of the key:  Z
New value (return to keep the current value) ? G
New value of the key:  G
Choice ? 1
Lg:  321
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
------------------------------------------------------------------------------
                         B  O  B  W  A  L  K  E  R  S  T  O  P  S  P  E  N  T  C
                         H  I  K  N  B  C  B  C  U  K  V  O  K  I  T  W  P  F  Q

    O  N  S  I  D  E  R  A  B  L  E  T  I  M  E  I  N  T  A  L  K  S  O  U  T  S
    N  Q  U  W  M  F  O  R  U  R  Y  U  J  V  C  P  R  V  L  E  D  Y  S  E  F  A

    I  D  E  T  H  E  N  E  G  O  T  I  A  T  I  N  G  T  A  B  L  E  S  T  O  P
    K  V  M  H  R  F  I  N  W  P  X  Y  S  L  Y  H  Y  V  L  X  O  Q  O  D  V  O

    H  A  V  E  D  I  S  C  O  V  E  R  E  D  T  H  A  T  S  H  A  W  E  N  T  E
    F  W  Q  Z  M  D  S  W  I  T  Y  W  V  E  V  Z  Q  V  J  U  U  J  W  P  F  B

    R  P  R  I  S  E  W  O  U  L  D  B  E  H  A  P  P  Y  W  I  T  H  A  O  N  E
    B  Y  A  W  B  F  E  Y  Z  R  U  C  V  Q  E  D  B  N  D  N  Y  E  X  F  G  B

    A  N  D  A  H  A  L  F  P  E  N  N  Y  D  I  S  C  O  U  N  T  O  N  I  T  E
    Z  Q  F  T  R  A  M  I  Q  O  D  J  M  E  Y  R  H  A  A  F  Y  G  T  R  F  B

    M  S  O  R  D  E  R  E  D  U  N  D  E  R  O  N  E  T  H  O  U  S  A  N  D  A
    R  H  X  Q  M  F  O  N  H  W  D  A  V  D  Q  H  T  V  S  H  M  Y  X  P  B  V

    N  D  A  T  W  O  P  E  N  N  Y  D  I  S  C  O  U  N  T  O  N  I  T  E  M  S
    S  V  G  H  Y  R  Z  N  L  B  V  A  J  F  G  W  O  O  M  H  P  I  K  U  N  A

    A  B  O  V  E  O  N  E  T  H  O  U  S  A  N  D  S  T  O  P  S  U  G  G  E  S
    Z  R  X  O  P  R  I  N  A  J  Z  N  Z  Y  U  L  K  V  O  K  I  F  D  A  I  A

    T  W  E  A  C  C  E  P  T  O  F  F  E  R  A  N  D  I  N  C  L  U  D  E  T  H
    O  C  M  T  N  B  H  J  A  P  B  H  V  D  E  H  N  B  Y  O  O  F  R  U  F  I

    A  T  C  U  S  T  O  M  M  A  D  E  I  T  E  M  S  D  O  N  O  T  A  P  P  L
    Z  B  J  R  B  P  B  M  C  M  U  L  J  L  C  S  K  K  O  F  J  W  X  W  M  Z

    Y  S  T  O  P  W  A  I  T  I  N  G  I  N  S  T  R  U  C  T  I  O  N  S  S  T
    C  H  R  U  S  O  K  A  A  H  D  G  J  K  D  G  F  U  E  S  G  G  T  Q  W  C

    O  P  J  O  H  N  H  A  R  R  I  N  G  T  O  N
    N  Y  H  U  R  W  G  R  P  Z  O  J  U  L  Q  H


Choice ? 3
Choice ? 4
The Rotor Generatrix Tableau. Key:  G
Coord of  Crypto  : Abscissa:  Plain  , ordinate: Position of rotor
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
 A- Z                    F  K           R  S  N        B     O              C
 B- W  R     V                             Q     Y        H  B        C
 C- G     J  F  M              H              X        A  U  R     Q
 D- T           Z           W                 U        Q     H  R  O
 E-       N  M  P        R                       S        B           Y
 F- A     B     F           D              W  R              P        O
 G- K           H        G           M     I  B  Z     O  S           E
 H- R  H  W     N  I        A           M     Y  J
 I-    U     H        W                 C  L  I  Q     P     A  Z
 J- M  K        O        J  H        R     B  P        Z        W  T
 K-          U  Y  B        O              D  Z              X        N     V
 L- B  C     A  L  H  G     Y              J           W     U  N
 M- S           V     U     J        C                    Z                 M
 N- Y        E           Q        B     V  K           D  F  L
 O- E     G     C           Y              U  Q           D  V
 P-          L           Z  P           S  H  W  D     U  R  G
 Q- Q     H  N  T     Y                    R     B     F  K     O
 R-          K              B              O  A              V  U           N
 S- L     E              S                 Y  O           J  M  A     D
 T-    X  O              U  N        E     F  H  K           S
 U- U                       G     D  O     P  J           I  Y  M
 V-             Q        E  I                 G  T        Y  W  F     J
 W- X        R  W     D                    T  S           O  K
 X-             U     A     R              P  F  W        Q  D  E
 Y-          B  I                       N  G  V  M        W  F
 Z- V     Q     B        I           Z           O        A  C
Choice ?
Choice ? 8
Permutation alphabet (return to exit) ? QWERTYUIOPASDFGHJKLZXCVBNM
Permutation made...
Choice ? 6
 Q  W  E  R  T  Y  U  I  O  P  A  S  D  F  G  H  J  K  L  Z  X  C  V  B  N  M
------------------------------------------------------------------------------
          B  O  C     K  N     Z              F                          S  R
    C        B              Y  W  H  V                                R  Q
       M  A  R           X     G  U  F           H              J  Q
       Z  Q  H     R  W  U     T                                   O
    Y  P                    S     B  M        R                 N
    O  F     P        D  R     A                                B        W
    E  H  O              B  Z  K  S           G        M                 I
       N              A  Y  J  R        I                       W     H     M
          P  A     Z     I  Q        H     W                          U  L  C
       O  Z        W  H  P     M              J        R           T  K  B
    N  Y     X  V     O  Z           U  B                                D
       L  W  U     N  Y        B     A  H  G                          C  J
       V        M     J        S  Z        U           C
          D  L                 Y  F  E        Q     B                    K  V
       C     V        Y  Q     E  D                             G        U
          U  G        P  W  D     R  L        Z                          H  S
       T  F        O        B  Q  K  N     Y                    H        R
             V  N  U  B  A           K                                   O
    D        M     A     O     L  J           S                 E        Y
             S        N  H  K                 U        E        O     X  F
             Y     M  G  J     U  I                 D  O                 P
    J  Q     W     F  I  G  T     Y           E
       W     K           S     X  O  R     D                             T
       U     D     E  R  F  W     Q        A                             P
       I     F           V  M     W  B                                   G  N
       B     C              O  V  A           I        Z        Q
Choice ?

The first line (after reconstruction of the board) provides the wiring of the rotor: GADBOCTKNUZXIWHFQYJVPMELSR.

The order of the columns corresponds to the reverse permutation of the Keyboard: QWERTYUIOPASDFGHJKLZXCVBNM The keyboard wiring being KXVMCNOPHQRSZYIJADLEGWBUFT.

Unknown Rotor and Lampboard

Creation of the cryptogramm:

C:\H1_TOOLS> python hebern1_tui.py -R c5 -L RFS
 
	< MSGS\p100.pln > MSGS\p100_3.cry

C:\H1_TOOLS> python groupe.py < MSGS\p100_3.cry
HYVDG RMYKO GYLCW OWRZA FDXBU DYSOV GPIYU HMDGG NZIJH LFLXB
UAPRH AUKJO WCJAU KKWDY PCPDA TMJMB HRCVF DQJLK BAUUN AREZV
ATVKN KCVPX FPPOZ CLETC MQXOM PICNY ZJVHD SFAYW HAQDO MKJMC
FDJIV OAGHZ GDBGP SIFCD OBKYR RMGJK APSVC EVLVC AOFNE AFZEE
MGEVW JXLAM KHHKV GPTZX VDPWD JBGMH VVXHH BZNDK EYXCN ZGWYB
LTWNP BWHAU HXGIJ LEYPS XZJQN WMJMC MGCFT TTNPT SKDOP CYSBA
NBLTW NPBWK XQOBT TSKZY ADZCK SUGKA WNMGZ YEBAG ZHDXP OXSJR
NJGBL TWNPB WKXQA OFPPI RWNTJ ZBEEG GOTNM GZYOD FACVG ZGYJS
VKBAN JLCSG XLJCQ WHFJI TGEYU QHZED KKGNZ OSDFI TUZPF IZRGT
XZWDK WMRYE CAYVC HSWBF MXHGQ WJBMR VDLDI EUNCV EQEOH NCIDS
FNERU FKCFF XJPUQ YCCTA HIHNH KVIQA AAEBP OWJFP VPVTR PHYVP
IHXMF NIFRE KMFXW QQPWF NZHPN TSUXG PSJZN KQWKY RXBLQ QEWHP
CVGWV RARXY WHNYD VZAMK ZYNTP FMJSL XTKGA XNTXB LUTUF IZMED
YBHNH TFMQY WKGEO DFXON PFVTT DFPRN DSFQQ DZAUX KHQVW GMHZM
EDYBH NHTFG PSJZE EOBEE SKFJC ZXSDO ZEJSJ EDQHZ RBQZK RRLIP
HEQYD OZAGX GTAEW XBBFE LJUJF UYYRB AOVES UGTCQ MZTZY QKARP
FJAIC DIFFM PGGWK SZAXB ESBLL OPDVV CDHNK KBPWW XOWIV BGZSY
WLPLJ FRNMV ZPIHX TQJZC LBNBL OTISL JYODD OZLEU AGQTV YCPUW
IETVF KEMAT BKZDD SFNKD EZLDO WREPE FMLEI DOBGF JUXFW MLRVT
MKDNM AMGYK TDFKZ RUKWG QNUIR HNWRE URFAT ISOOE TMFUD ELJJV
KQUUY JEHXH VBVQE PJIAA FZWGU KKTXO QVRHX HXYAW EIUGS AJELQ
MZGUX WBXOA GPVIE BMJHK EMMWY YMTVP BDIKT YFDIE CDYPG MAXFA
STQYL VNGSR FCZPM IXOHI GWLRE YFOBZ BKGSI WTVSS VQEDP NNDIG
NYFOG ZEKGS LIRXM BLYAR PPAIF UVOLY QXTKO OJZTR MLCKX QASSD
GVFAW OYRIH UBOVR XOJVL RNLPG IAYXF LQUIO XKHVO TDQFY QEOHY
KDDUF EFTTZ NHUMR AWLMB YMVZA SFPPD MGWSY KJGNR TRKKM VWYAU
ZPUGD PRYHC AKKBO DIQSC MGJGJ TSLVU ZURWK GJXTW MYLJF CQCII
TSYXJ MAHFM SUZZK CPZEZ BFNKV VQTPP FVIPD ETGLC IPN
Cipher table display:
C:\H1_TOOLS> python tb_pln_cry.py MSGS\p100_3.cry MSGS\p100.pln
1 - Print cryptogram and plain text
2 - Choose the key (Z by default)
3 - Create generatrix
4 - Print generatrix
5 - Change mode (cipher or decipher [by default])
6 - Print ordered array
7 - Permute two columns of the ordered array
8 - Permute all columns of the ordered array
9 - Search columns fit
99- Quit
Choice ? 3
Choice ? 4
The Rotor Generatrix Tableau. Key:  Z
Coord of  Crypto  : Abscissa:  Plain  , ordinate: Position of rotor
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
 A- M  S  I     A  T     Z  O     B  F     P  N  D     Y  E  H     L
 B- N     M     P  K  R  Y  F        L  G  B  X  A     O  S  J  I        E  V
 C- H  U  R  G  V     T     K        A     M  Z  P     N  F  C  S  J  O
 D- E  L  A     I  P  X  V  M     Z  K  U  R  G  T     D  H  N  F     J     W
 E- I  Z  J  C  G        U  H     V  E  L  A  P        S  B  D  T  F
 F- R     H  A  U        S  L        I  Z  G  K  M     W  X  P  D  T  V     Y
 G- D     Z  E  F     N  I  J        R  A  V     B     M  G  X  P  Q  W
 H- N  R  O  D  Y     C  F  T        Z  Q  E  W        A  M  G        P     I
 I- L  Y  X  T  W  H  D  P  S        J     K  Q  E     U  A  F        N  C
 J- T  M        S     G  N  C        Y     J  O  R  E  Z  D  Q  A  B  H  U  W
 K- U  G  V  N  M  A  B  H  I     T  Q  F  Y  L        X  J  Z  W     E
 L- A           Z     S  C  X        D  T  I  Y        F  R  K  N     V
 M- J  W  E  R  K  N        G     X     C  T  I  U     L  V  B     Q        O
 N- K        V  B  S  U  A  D     G  H  P  C  E  X     Q  W  T  J     Z
 O- Y     Q  W  N  E     X  U        G     O  M        K  P  F  B     T  L
 P- C  J  K  B  O  R  M  E  Z        S  Y  U  H  F     G  D  W              Q
 Q- F  V  W  Y  L     O  R  B     N  T  E  S  D  Q     X  K  I  G     M  J
 R- Q  K  T  I  E  Y  L  W  R        O  N  X  J  Z     V  C  A     U
 S-    P  C  O  T     K  L  W        B  M  F  R  U     H  Z  S  E           X
 T- G  H  Y  P  C  V  I  K  A        U  D  L  E  J     R  N  O  X           F  Q
 U- S     G     Q  C  V  Z  P     E  X  I  O  F  N     B  Y  M
 V- P  A  S  J  H        G  V     M  C  Y  D  B  I        U  L  K        F
 W- Z     F     J  L  A  Q  Y     H  T  X  W  C        E  I  V     M
 X- B        F  I  Z  J  T  E        M  K  H  V  G     C  Q  Y        L
 Y- X        C  R        O  N     U  V  S  Q  A        J  T  E  M  I
 Z- W     H  L  D     Y  B  A     Q  N  J  Z  T  S     P  O  U        R     K
Choice ? 9
Note: don't use the ordered table
A-B (14), A-K (12),
B-C (13), B-D (10), B-F (7), B-H (14), B-I (15), B-M (11), B-O (14), B-U (9),
    B-V (4), B-W (10), B-X (5),
C-D (15), C-F (9), C-P (16),
D-E (19), D-K (8), D-X (4),
E-F (14), E-K (12), E-U (16), E-X (6),
F-G (10), F-H (12), F-K (7), F-M (10), F-N (14), F-R (13), F-S (14), F-V (5), 
    F-W (8), F-X (4), F-Y (6),
G-H (17), G-I (19), G-K (7), G-N (19), G-U (12), G-W (9), G-X (6), G-Y (8),
H-I (24), H-K (12), H-U (14), H-X (5),
I-K (12),

K-L (11), K-P (10), K-R (11), K-U (7), K-V (4), K-W (6),
L-M (20), L-W (13), L-X (6),
M-N (21), M-U (14), M-X (4),
N-O (25), N-X (6),
O-P (18),
P-U (10), P-X (4),

R-S (25), R-U (16), R-X (6),
S-T (26), S-U (16),
T-U (16), T-X (6),
U-V (7), U-W (8),
V-W (7), V-X (4), V-Y (4),
W-Y (6),

As we can see, the columns are well ordered. Just read the diagonal:

	EUM, ILR, RZA, TYO, UMX 
We obtain the diagonal:
	EUMX, ILRZA  
Let's add sequences:
	FJQ, QVK, GPT, SHC, ZAG
The diagonal is filled:
	EUMX, ILRZAGPTYO,  FJQVK 
Let's add other sequences:
	GPTYOEU, MXDFJQ
The diagonal is complete:
	ILRZAGPTYOEUMXDFJQVKWBNSHC
It is now possible to complete the table and then we will be able to decipher any message:
  A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
A M S I X A T W Z O J B F R P N D G Y E H Q L C V U K
B N C M Z P K R Y F W D L G B X A T O S J I H Q E V U
C H U R G V L T D K X I A W M Z P Y N F C S J O Q E B
D E L A Q I P X V M C Z K U R G T B D H N F Y J O W S
E I Z J C G M Q U H R V E L A P W X S B D T F Y K N O
F R F H A U J E S L Q O I Z G K M N W X P D T V B Y C
G D S Z E F O N I J Y C R A V U B K M G X P Q W T H L
H N R O D Y B C F T H L Z Q E W V U A M G J K P S I X
I L Y X T W H D P S I R J O K Q E Z U A F V G N C M B
J T M P K S X G N C L F Y V J O R E Z D Q A B H U W I
K U G V N M A B H I D T Q F Y L O R X J Z W S E K C P
L A Q B U Z W S C X P J D T I Y L M F R K N O V H G E
M J W E R K N H M G F X P C T I U D L V B Y Q S A O Z
N K O L V B S U A D M G H P C E X I Q W T J N Z Y R F
O Y I Q W N E Z X U A S G H O M C J K P F B R T L D V
P C J K B O R M E Z N A S Y U H F V G D W L P I X Q T
Q F V W Y L U O R B Z N T E S D Q A X K I G C M J P H
R Q K T I E Y L W R B P O N X J Z M V C A H U F G S D
S V P C O T I K L W G Y B M F R U Q H Z S E D A N X J
T G H Y P C V I K A T W U D L E J S R N O X Z B M F Q
U S T G H Q C V Z P K E X I O F N L B Y M R W U D J A
V P A S J H Q R G V O M C Y D B I W T U L K E X F Z N
W Z N F S J L A Q Y U H T X W C K P E I V O M D R B G
X B D N F I Z J T E S P M K H V G O C Q Y U X L W A R
Y X B D C R F P O N G U V S Q A Y H J T E M I K Z L W
Z W X H L D G Y B A E Q N J Z T S F P O U C V R I K M

Rotor, Keyboard and Lampboard unknown

First step: write cryptogram in 26 columns

The first step is to write the plain text and the cryptogram in increments of 26 letters and starting with the key + 1 (the rotor advances before encryption).

Then we transfer the letters into a 26x26 table whose columns correspond to the plain text letters and the lines to the position of the rotor.

C:\H1_TOOLS> python hebern1_tui.py 
	-R =GADBOCTKNUZXIWHFQYJVPMELSR 
	-K =KXVMCNOPHQRSZYIJADLEGWBUFT 
	-L =BLACKHORSEDFGIJMNPQTUVWXYZ 
	-E G < MSGS\p25.pln | python groupe.py
RSDIL ALAUD VJDST WMHNI NUWGH JPUPY UEVAM PVFKC YQKHB DVGRP
HSIWM XYQFY RYVFX JNJCV JHWNZ GCQWS TYWVK VZNVE UUEWM HLLYB
WLHKY ZPUAV NKCLI CIYKX HOLZN HTPBG SNJCE GKYPR BBHYO TPHLP
RXNGH JIRWC BVCNR TVQRG YXMLV QVORY PZIFL VBEHO WJJGR MSDUI
BZPXJ MPSIB EZIZY UFDVJ DSHCB SBJAG TILRE BMLRV CKRIL YJJHP
UHSZL EPLML GAGUF EFAQD DJHEW XWGZA RPUQJ DBBRC OEDCO HUKQO
OTNWA IYRUP WOPMZ JEUFN R

C:\H1_TOOLS> python tb_pln_cry.py MSGS\p50_2.cry MSGS\p25.pln
1 - Print cryptogram and plain text
2 - Choose the key (Z by default)
3 - Create generatrix
4 - Print generatrix
5 - Change mode (cipher or decipher [by default])
6 - Print ordered array
7 - Permute two columns of the ordered array
8 - Permute all columns of the ordered array
9 - Search columns fit
99- Quit
Choice ? 2
Current value of the key:  Z
New value (return to keep the current value) ? G
New value of the key:  G
Choice ? 1
Lg:  321
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
------------------------------------------------------------------------------
                         B  O  B  W  A  L  K  E  R  S  T  O  P  S  P  E  N  T  C
                         R  S  D  I  L  A  L  A  U  D  V  J  D  S  T  W  M  H  N

    O  N  S  I  D  E  R  A  B  L  E  T  I  M  E  I  N  T  A  L  K  S  O  U  T  S
    I  N  U  W  G  H  J  P  U  P  Y  U  E  V  A  M  P  V  F  K  C  Y  Q  K  H  B

    I  D  E  T  H  E  N  E  G  O  T  I  A  T  I  N  G  T  A  B  L  E  S  T  O  P
    D  V  G  R  P  H  S  I  W  M  X  Y  Q  F  Y  R  Y  V  F  X  J  N  J  C  V  J

    H  A  V  E  D  I  S  C  O  V  E  R  E  D  T  H  A  T  S  H  A  W  E  N  T  E
    H  W  N  Z  G  C  Q  W  S  T  Y  W  V  K  V  Z  N  V  E  U  U  E  W  M  H  L

    R  P  R  I  S  E  W  O  U  L  D  B  E  H  A  P  P  Y  W  I  T  H  A  O  N  E
    L  Y  B  W  L  H  K  Y  Z  P  U  A  V  N  K  C  L  I  C  I  Y  K  X  H  O  L

    A  N  D  A  H  A  L  F  P  E  N  N  Y  D  I  S  C  O  U  N  T  O  N  I  T  E
    Z  N  H  T  P  B  G  S  N  J  C  E  G  K  Y  P  R  B  B  H  Y  O  T  P  H  L

    M  S  O  R  D  E  R  E  D  U  N  D  E  R  O  N  E  T  H  O  U  S  A  N  D  A
    P  R  X  N  G  H  J  I  R  W  C  B  V  C  N  R  T  V  Q  R  G  Y  X  M  L  V

    N  D  A  T  W  O  P  E  N  N  Y  D  I  S  C  O  U  N  T  O  N  I  T  E  M  S
    Q  V  O  R  Y  P  Z  I  F  L  V  B  E  H  O  W  J  J  G  R  M  S  D  U  I  B

    A  B  O  V  E  O  N  E  T  H  O  U  S  A  N  D  S  T  O  P  S  U  G  G  E  S
    Z  P  X  J  M  P  S  I  B  E  Z  I  Z  Y  U  F  D  V  J  D  S  H  C  B  S  B

    T  W  E  A  C  C  E  P  T  O  F  F  E  R  A  N  D  I  N  C  L  U  D  E  T  H
    J  A  G  T  I  L  R  E  B  M  L  R  V  C  K  R  I  L  Y  J  J  H  P  U  H  S

    A  T  C  U  S  T  O  M  M  A  D  E  I  T  E  M  S  D  O  N  O  T  A  P  P  L
    Z  L  E  P  L  M  L  G  A  G  U  F  E  F  A  Q  D  D  J  H  E  W  X  W  G  Z

    Y  S  T  O  P  W  A  I  T  I  N  G  I  N  S  T  R  U  C  T  I  O  N  S  S  T
    A  R  P  U  Q  J  D  B  B  R  C  O  E  D  C  O  H  U  K  Q  O  O  T  N  W  A

    O  P  J  O  H  N  H  A  R  R  I  N  G  T  O  N
    I  Y  R  U  P  W  O  P  M  Z  J  E  U  F  N  R

Choice ? 3
Choice ? 4
The Rotor Generatrix Tableau. Key:  G
Coord of  Crypto  : Abscissa:  Plain  , ordinate: Position of rotor
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
 A- Z                    H  D           P  Q  I        L     J              A
 B- W  P     V                             N     Y        R  L        A
 C- O     E  H  G              R              X        B  U  P     N
 D- T           Z           W                 U        N     R  P  J
 E-       I  G  M        P                       Q        L           Y
 F- B     L     H           C              W  P              M        J
 G- D           R        O           G     S  L  Z     J  Q           K
 H- P  R  W     I  S        B           G     Y  E
 I-    U     R        W                 A  F  S  N     M     B  Z
 J- G  D        J        E  R        P     L  M        Z        W  T
 K-          U  Y  L        J              C  Z              X        I     V
 L- L  A     B  F  R  O     Y              E           W     U  I
 M- Q           V     U     E        A                    Z                 G
 N- Y        K           N        L     V  D           C  H  F
 O- K     O     A           Y              U  N           C  V
 P-          F           Z  M           Q  R  W  C     U  P  O
 Q- N     R  I  T     Y                    P     L     H  D     J
 R-          D              L              J  B              V  U           I
 S- F     K              Q                 Y  J           E  G  B     C
 T-    X  J              U  I        K     H  R  D           Q
 U- U                       O     C  J     M  E           S  Y  G
 V-             N        K  S                 O  T        Y  W  H     E
 W- X        P  W     C                    T  Q           J  D
 X-             U     B     P              M  H  W        N  C  K
 Y-          L  S                       I  O  V  G        W  H
 Z- V     N     L        S           Z           J        B  A
Choice ?

Second step : anagramming plaintext letters columns

The next step is to rearrange the columns to produce diagonals that correspond to the inverse of the Keyboard permutation.

Choice ? 8
Permutation alphabet (return to exit) ? QWERTYUIOPASDFGHJKLZXCVBNM
Permutation made...
Choice ? 6
 Q  W  E  R  T  Y  U  I  O  P  A  S  D  F  G  H  J  K  L  Z  X  C  V  B  N  M
------------------------------------------------------------------------------
          L  J  A     D  I     Z              H                          Q  P
    A        L              Y  W  R  V                                P  N
       G  B  P           X     O  U  H           R              E  N
       Z  N  R     P  W  U     T                                   J
    Y  M                    Q     L  G        P                 I
    J  H     M        C  P     B                                L        W
    K  R  J              L  Z  D  Q           O        G                 S
       I              B  Y  E  P        S                       W     R     G
          M  B     Z     S  N        R     W                          U  F  A
       J  Z        W  R  M     G              E        P           T  D  L
    I  Y     X  V     J  Z           U  L                                C
       F  W  U     I  Y        L     B  R  O                          A  E
       V        G     E        Q  Z        U           A
          C  F                 Y  H  K        N     L                    D  V
       A     V        Y  N     K  C                             O        U
          U  O        M  W  C     P  F        Z                          R  Q
       T  H        J        L  N  D  I     Y                    R        P
             V  I  U  L  B           D                                   J
    C        G     B     J     F  E           Q                 K        Y
             Q        I  R  D                 U        K        J     X  H
             Y     G  O  E     U  S                 C  J                 M
    E  N     W     H  S  O  T     Y           K
       W     D           Q     X  J  P     C                             T
       U     C     K  P  H  W     N        B                             M
       S     H           V  G     W  L                                   O  I
       L     A              J  V  B           S        Z        N
Choice ?

In the example, we gave the final result. In fact we reorganized the columns based on the following diagonal. We discovered it as the columns were permuted. It corresponds to the Lampboard permutation.

   B L A C K H O R S E D F G I J M N P Q T U V W X Y Z

We also deduced the Keyboard permutation, which is the inverse of the column heads (QWERTY...).

   K X V M C N O P H Q R S Z Y I J A D L E G W B U F T

Step three : anagramming cryptogram letters columns

We can also try to reorganize the columns of the cipher letters. This step can be carried out as an alternative to the previous step. If this step is carried out after the previous step, this allows confirmation of the permutations found. If this step is carried out at the same time, it allows deductions to be made which help to find the solution more easily.

Choice ? 5
Current value of the mode:  Cipher(C)
New value (return to keep the current value) [C/D] ? D
New value of the mode:  Decipher(D)
...Now, you need to generate again the generatrix!
Choice ? 3
Choice ? 4
The Rotor Generatrix Tableau. Key:  G
Coord of  Plain  : Abscissa:  Crypto  , ordinate: Position of rotor
    A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z
 A- Y        I           H  O  T     R           M  N                          A
 B- W                                T     N     B     S           D  A     P
 C-    R        C     E  D                 V  A  T     J        S        O
 D-                            V           R     U     T     A  O     I        E
 E-                   D     C        S  E        H  P                       W
 F-    A  I              E     W     C  T        O                    N
 G-          A        L        R  W  O        H     S  E  N                    P
 H-    I        P     M     E                    A     B  F           C     O
 I- M  T           N                    R  P           D  O     B     G        U
 J-          B  H     A        E     N  O        L     I     V        U        R
 K-       N                 W  I     F                          D  Y     T  E  O
 L- B  D        N  E        U        A        G        F        T     R     I
 M- L           I     Y                             A           G  E           S
 N-       R  N     T     S        D  K     H                       M        A
 O- E     S                       A        O  C                 N  T        I
 P-       P        D                    I     T  S  M  N        R     O        H
 Q-          S           R  D  U     P     A     N     C     E              G
 R-    O     D              Y  N     I                          U  T
 S-    U  W     S  A  T        O  C                 H                       N
 T-          P           N  I  C  L                 T  O        H        B
 U-       K     O     U        L        N     I           S     A           T
 V-             W        U        H        E  O           I  P        T     S
 W-       G  T                 S                 D  O        N        E  A
 X-    G  T              O        U     N  S     I              E     P
 Y-                   P  T  M        D        N           E        O  S
 Z- T  S                       P     E     C              H        A           L
Choice ?
...
Choice ? 6
 L  A  C  K  H  O  R  S  E  D  F  G  I  J  M  N  P  Q  T  U  V  W  X  Y  Z  B
------------------------------------------------------------------------------
 R  Y        H              I        O  T        M  N                    A
 T  W              S                          N  B           D  A     P
             D  A  J     C        E           V  T        S        O        R
                   T                    V     R  U     A  O     I        E
 S                                D  C     E     H  P                 W
 C     I     E                          W  T     O              N           A
 O        W     H  E  N     A     L     R           S                    P
                   B  F  P        M  E           A              C     O     I
    M              D  O        N           R  P           B     G        U  T
 N                 I     H  B     A     E  O     L     V        U        R
 F     N                             W  I                 D  Y     T  E  O
 A  B           G  F     N     E     U                    T     R     I     D
    L                    I        Y                 A     G  E           S
 K     R  D  S              N  T              H              M        A
    E  S  A     C                             O           N  T        I
       P        T  N           D           I     S  M     R     O        H
 P           R     C        S        D  U     A  N     E              G
 I                          D        Y  N                 U  T              O
       W  C              S     A  T     O           H                 N     U
          L  N     O        P        I  C           T     H        B
       K        I     S  O        U     L  N              A           T
          H  U  O     I  W                    E        P        T     S
       G                    T           S        D  O  N        E  A
       T  U  O                             N  S  I        E     P           G
 D           T  N     E           P  M                       O  S
 E  T                 H                 P     C              A           L  S

In this approach, the diagonals correspond to the inverse permutation of the keyboard permutation (QWERTY...), and the column heads correspond to the Lampoard permutation.

Step four: find the rotor wiring

When we have reconstituted the encryption table, the first line will allow us to find the rotor wiring.

We search for the position of each letter of line A in the alphabet Lampboard. The corresponding letter of the rotor wiring has the same position, but in the ordered alphabet (ABC...Z).

So, the letter O is in the sixth position in the Lampboard permutation (BLACKHO). The letter number 6 in the alphabet (ABCDEFG) is G. G becomes the first connection of the rotor.

	         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
	Row A:   O B C L J A T D I U Z X S W R H N Y E V M G K F Q P
	Output:  B L A C K H O R S E D F G I J M N P Q T U V W X Y Z
	Position:6 0 3 114 2191013202523 822 7 51624 9211512 4111817 
	Alpahbet:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
	Wiring:  G A D B O C T K N U Z X I W H F Q Y J V P M E L S R