Assignment 4


Cryptography

Problem 1: Substution Cipher Decryption

  • Break the letter-substitution cipher shown here:
LESTX KQLEY TQOJX ZEHYT QJQKL IQHST XAALY EXYSE SRYPH LJYPG QYTXK QVLKK QHGLY TYTQQ EHRXV GXJBR SEHSE XXFPR BQKKE XJPQY SHJPA SJQRS EHPTX KQGLY TEXYT LEOLE LYYXR LYHXG EXEXJ YXQSY LYGSR STXAA LYTXK QSEHY TSYBQ SERDX BVXJY
  • Hints:

    • This is actually quite challenging to do without a program to help, though you could start looking for letter combinations (such as double-letters or common English characters that are often near each other). But, to help out, the following is the output from the following python script:

      #!/usr/bin/env python3
      import itertools
      import re
      
      WORDLIST = "top-words.txt"
      
      ENGLISH_FREQS = (
          ('E', 0.127),
          ('T', 0.091),
          ('A', 0.082),
          ('O', 0.075),
          ('I', 0.07),
          ('N', 0.067),
          ('S', 0.063),
          ('H', 0.061),
          ('R', 0.06),
          ('D', 0.043),
          ('L', 0.04),
          ('C', 0.028),
          ('U', 0.028),
          ('M', 0.024),
          ('W', 0.024),
          ('F', 0.022),
          ('G', 0.02),
          ('Y', 0.02),
          ('P', 0.019),
          ('B', 0.015),
          ('V', 0.0098),
          ('K', 0.0077),
          ('J', 0.0015),
          ('X', 0.0015),
          ('Q', 0.00095),
          ('Z', 0.00074),
      )
      
      def main():
          ciphertext = 'LESTX KQLEY TQOJX ZEHYT QJQKL IQHST XAALY EXYSE SRYPH LJYPG QYTXK QVLKK QHGLY TYTQQ EHRXV GXJBR SEHSE XXFPR BQKKE XJPQY SHJPA SJQRS EHPTX KQGLY TEXYT LEOLE LYYXR LYHXG EXEXJ YXQSY LYGSR STXAA LYTXK QSEHY TSYBQ SERDX BVXJY' 
      
          freqs = get_frequencies(ciphertext)
          sorted_freqs = get_sorted_freqs(freqs)
          """
          for letter, freq in sorted_freqs:
              print(f"{letter}\t{freq}")
          
          for ch, freq in sorted_freqs:
              print(f"{ch}: {freq}")
          """
          permute_top_ten(ciphertext.replace(' ', ''), sorted_freqs, ENGLISH_FREQS)
      
          # try_finding_THE(ciphertext, sorted_freqs)
      
      def get_frequencies(text):
          freqs = {}
          for ch in text:
              if ch != ' ':
                  if ch not in freqs:
                      freqs[ch] = 1
                  else:
                      freqs[ch] += 1
          # normalize
          for ch in freqs:
              freqs[ch] = round(freqs[ch] / len(text), 4)
          return freqs
      
      def get_sorted_freqs(freqs):
          return sorted([(k, v) for k, v in freqs.items()], key=lambda x: x[1], reverse=True)
      
      def permute_top_ten(text, sorted_freqs, english_freqs):
          perms = itertools.permutations(sorted_freqs[:10])
          max_word_matches = 0
          with open(WORDLIST) as f:
              TOP_1000_WORDS = set([x[:-1].upper() for x in f.readlines()])
          for idx, perm in enumerate(perms):
              """
              if idx % 10000 == 0:
                  print(f"count: {idx}")
              elif idx % 1000 == 0:
                  print(".", end='', flush=True)
              """
              perm = [x[0] for x in perm]
              full_perm = perm + [x[0] for x in sorted_freqs[10:]]
              key_dict = {}
              for idx2, ch in enumerate(full_perm):
                  key_dict[ch] = english_freqs[idx2][0]
              plaintext = decrypt(text, key_dict)
              """
              if idx == 20164:
                  word_matches = total_word_matches(TOP_1000_WORDS, plaintext, Print=True)
                  breakpoint()
              """
                  
              word_matches = total_word_matches(TOP_1000_WORDS, plaintext)
              if word_matches >= max_word_matches:
                  max_word_matches = word_matches
                  print(f"word matches: {word_matches}")
                  print(plaintext)
                  total_word_matches(TOP_1000_WORDS, plaintext, Print=True)
                  print()
      
      def decrypt(text, key_dict):
          plaintext = ''
          for ch in text:
              plaintext += key_dict[ch]
          return plaintext
      
      
      def total_word_matches(wordlist, text, min_length=2, max_length=14, Print=False):
          word_count = 0
          for i in range(len(text)):
              for j in range(min_length, max_length):
                  if i + j > len(text):
                      break
                  test_word = text[i:i + j]
                  if test_word in wordlist:
                      word_count += 1
                      if Print:
                          print(f"{test_word},", end='')
          if Print:
              print()
          return word_count
      
      if __name__ == "__main__":
          main()
      
    • The code is actually quite slow, and requires this English word file that has over 6000 common English words in it.

    • Here is a faster version of the program, written in C++. If you have a C++ compiler, such as clang++, you can compile it like this:

      clang++ -O3 -march=native -DNDEBUG decryptP1.cpp -o decryptP1
      
    • Here is the output of the program:

      word matches: 24
      NAISTRONAESOGDTYAHESODORNPOHISTMMNEATEIAILECHNDECUOESTROFNRROHUNESESOOAHLTFUTDWLIAHIATTBCLWORRATDCOEIHDCMIDOLIAHCSTROUNESATESNAGNANEETLNEHTUATATDETOIENEUILISTMMNESTROIAHESIEWOIALVTWFTDE
      IST,RON,ON,SO,SO,HIS,HIST,IST,EAT,ATE,OF,SO,RAT,MID,IDOL,SAT,ATE,AN,ATA,TO,LIST,IST,NEST,SIE,
      
      word matches: 27
      NAISTHONAESOGDTYARESODOHNPORISTMMNEATEIAILECRNDECUOESTHOFNHHORUNESESOOARLTFUTDWLIARIATTBCLWOHHATDCOEIRDCMIDOLIARCSTHOUNESATESNAGNANEETLNERTUATATDETOIENEUILISTMMNESTHOIARESIEWOIALVTWFTDE
      IST,HON,ON,SO,ARE,SO,IST,EAT,ATE,OF,RUN,SO,HAT,MID,IDOL,ARC,THOU,SAT,ATE,AN,ATA,TO,LIST,IST,NEST,ARE,SIE,
      
      word matches: 30
      NAIDTSONAEDOGHTYAREDOHOSNPORIDTMMNEATEIAILECRNHECUOEDTSOFNSSORUNEDEDOOARLTFUTHWLIARIATTBCLWOSSATHCOEIRHCMIHOLIARCDTSOUNEDATEDNAGNANEETLNERTUATATHETOIENEUILIDTMMNEDTSOIAREDIEWOIALVTWFTHE
      AID,SO,SON,ON,DOG,ARE,RED,RID,EAT,ATE,SO,OF,SO,RUN,SAT,ARC,SO,DATE,ATE,TED,AN,ATA,THE,TO,LID,SO,ARE,RED,DIE,THE,
      
      word matches: 32
      NAIDTHONAEDOGSTYAREDOSOHNPORIDTMMNEATEIAILECRNSECUOEDTHOFNHHORUNEDEDOOARLTFUTSWLIARIATTBCLWOHHATSCOEIRSCMISOLIARCDTHOUNEDATEDNAGNANEETLNERTUATATSETOIENEUILIDTMMNEDTHOIAREDIEWOIALVTWFTSE
      AID,HON,ON,DOG,DOGS,ARE,RED,DOS,SO,RID,EAT,ATE,SEC,OF,RUN,HAT,ISO,SO,SOL,ARC,THOU,DATE,ATE,TED,AN,ATA,SET,TO,LID,ARE,RED,DIE,
      
      word matches: 34
      SAINTHOSAENOGDTYARENODOHSPORINTMMSEATEIAILECRSDECUOENTHOFSHHORUSENENOOARLTFUTDWLIARIATTBCLWOHHATDCOEIRDCMIDOLIARCNTHOUSENATENSAGSASEETLSERTUATATDETOIESEUILINTMMSENTHOIARENIEWOIALVTWFTDE
      SAINT,IN,NO,ARE,NO,IN,SEA,SEAT,EAT,ATE,OF,USE,SEN,NO,HAT,MID,IDOL,ARC,THOU,HOUSE,USE,SEN,SENATE,NAT,ATE,TEN,SEE,SER,ATA,TO,IN,SEN,SENT,ARE,
      
      word matches: 34
      SAINTDOSAENOGHTYARENOHODSPORINTMMSEATEIAILECRSHECUOENTDOFSDDORUSENENOOARLTFUTHWLIARIATTBCLWODDATHCOEIRHCMIHOLIARCNTDOUSENATENSAGSASEETLSERTUATATHETOIESEUILINTMMSENTDOIARENIEWOIALVTWFTHE
      SAINT,IN,DOS,NO,ARE,NO,IN,SEA,SEAT,EAT,ATE,SHE,OF,USE,SEN,NO,ODD,ARC,USE,SEN,SENATE,NAT,ATE,TEN,SEE,SER,ATA,THE,TO,IN,SEN,SENT,ARE,THE,
      
      word matches: 34
      SAINTROSAENOGHTYADENOHORSPODINTMMSEATEIAILECDSHECUOENTROFSRRODUSENENOOADLTFUTHWLIADIATTBCLWORRATHCOEIDHCMIHOLIADCNTROUSENATENSAGSASEETLSEDTUATATHETOIESEUILINTMMSENTROIADENIEWOIALVTWFTHE
      SAINT,IN,ROSA,NO,DEN,NO,POD,IN,SEA,SEAT,EAT,ATE,SHE,OF,ROD,USE,SEN,NO,RAT,USE,SEN,SENATE,NAT,ATE,TEN,SEE,ATA,THE,TO,IN,SEN,SENT,DEN,THE,
      
      word matches: 41
      SAIRTHOSAEROGDTYANERODOHSPONIRTMMSEATEIAILECNSDECUOERTHOFSHHONUSEREROOANLTFUTDWLIANIATTBCLWOHHATDCOEINDCMIDOLIANCRTHOUSERATERSAGSASEETLSENTUATATDETOIESEUILIRTMMSERTHOIANERIEWOIALVTWFTDE
      AIR,AN,ROD,ON,SEA,SEAT,EAT,ATE,OF,HON,ON,USE,USER,SER,AN,IAN,AN,HAT,IN,IND,MID,IDOL,IAN,AN,THOU,HOUSE,USE,USER,SER,ERA,RAT,RATE,ATE,SEE,SEN,SENT,ATA,TO,SER,IAN,AN,
      
      word matches: 41
      RAIDTSORAEDOGHTYANEDOHOSRPONIDTMMREATEIAILECNRHECUOEDTSOFRSSONUREDEDOOANLTFUTHWLIANIATTBCLWOSSATHCOEINHCMIHOLIANCDTSOUREDATEDRAGRAREETLRENTUATATHETOIEREUILIDTMMREDTSOIANEDIEWOIALVTWFTHE
      RAID,AID,SO,DOG,AN,ON,EAT,ATE,SO,OF,SO,SON,ON,RED,AN,IAN,AN,SAT,IN,IAN,AN,SO,OUR,RED,DATE,ATE,TED,DRAG,RARE,ARE,RENT,ATA,THE,TO,LID,RED,SO,IAN,AN,DIE,THE,
      
      word matches: 44
      RAIDTHORAEDOGSTYANEDOSOHRPONIDTMMREATEIAILECNRSECUOEDTHOFRHHONUREDEDOOANLTFUTSWLIANIATTBCLWOHHATSCOEINSCMISOLIANCDTHOUREDATEDRAGRAREETLRENTUATATSETOIEREUILIDTMMREDTHOIANEDIEWOIALVTWFTSE
      RAID,AID,DOG,DOGS,AN,DOS,SO,ON,EAT,ATE,SEC,OF,HON,ON,RED,AN,IAN,AN,HAT,IN,ISO,SO,SOL,IAN,AN,THOU,HOUR,OUR,RED,DATE,ATE,TED,DRAG,RARE,ARE,RENT,ATA,SET,TO,LID,RED,IAN,AN,DIE,
      
      word matches: 44
      RANDTSORAEDOGHTYAIEDOHOSRPOINDTMMREATENANLECIRHECUOEDTSOFRSSOIUREDEDOOAILTFUTHWLNAINATTBCLWOSSATHCOENIHCMNHOLNAICDTSOUREDATEDRAGRAREETLREITUATATHETONEREUNLNDTMMREDTSONAIEDNEWONALVTWFTHE
      RAN,RAND,AN,AND,SO,DOG,IN,IND,EAT,ATE,TEN,AN,SO,OF,SO,RED,IN,NAT,SAT,SO,OUR,RED,DATE,ATE,TED,DRAG,RARE,ARE,ATA,THE,TO,TON,TONE,TONER,ON,ONE,RED,SO,SON,ON,NEW,WON,ON,THE,
      
      word matches: 46
      RANDTHORAEDOGSTYAIEDOSOHRPOINDTMMREATENANLECIRSECUOEDTHOFRHHOIUREDEDOOAILTFUTSWLNAINATTBCLWOHHATSCOENISCMNSOLNAICDTHOUREDATEDRAGRAREETLREITUATATSETONEREUNLNDTMMREDTHONAIEDNEWONALVTWFTSE
      RAN,RAND,AN,AND,DOG,DOGS,DOS,SO,IN,IND,EAT,ATE,TEN,AN,SEC,OF,RED,IN,NAT,HAT,SO,SOL,THOU,HOUR,OUR,RED,DATE,ATE,TED,DRAG,RARE,ARE,ATA,SET,TO,TON,TONE,TONER,ON,ONE,RED,HON,ON,NEW,WON,ON,
      
      word matches: 46
      SANDTHOSAEDOGITYAREDOIOHSPORNDTMMSEATENANLECRSIECUOEDTHOFSHHORUSEDEDOOARLTFUTIWLNARNATTBCLWOHHATICOENRICMNIOLNARCDTHOUSEDATEDSAGSASEETLSERTUATATIETONESEUNLNDTMMSEDTHONAREDNEWONALVTWFTIE
      SAN,SAND,AN,AND,DOG,ARE,RED,SEA,SEAT,EAT,ATE,TEN,AN,SIE,OF,USE,USED,NAT,HAT,ATI,ARC,THOU,HOUSE,USE,USED,DATE,ATE,TED,SEE,SER,ATA,ATI,TIE,TO,TON,TONE,ON,ONE,HON,ON,ARE,RED,NEW,WON,ON,TIE,
      
      word matches: 46
      SADRTHOSAEROGITYANEROIOHSPONDRTMMSEATEDADLECNSIECUOERTHOFSHHONUSEREROOANLTFUTIWLDANDATTBCLWOHHATICOEDNICMDIOLDANCRTHOUSERATERSAGSASEETLSENTUATATIETODESEUDLDRTMMSERTHODANERDEWODALVTWFTIE
      SAD,AN,POND,ON,SEA,SEAT,EAT,ATE,TED,DAD,SIE,OF,HON,ON,USE,USER,SER,AN,DAN,AN,AND,HAT,ATI,OLD,DAN,AN,THOU,HOUSE,USE,USER,SER,ERA,RAT,RATE,ATE,SEE,SEN,SENT,ATA,ATI,TIE,TO,SER,DAN,AN,TIE,
      
      word matches: 48
      SADRTOISAERIGHTYANERIHIOSPINDRTMMSEATEDADLECNSHECUIERTOIFSOOINUSERERIIANLTFUTHWLDANDATTBCLWIOOATHCIEDNHCMDHILDANCRTOIUSERATERSAGSASEETLSENTUATATHETIDESEUDLDRTMMSERTOIDANERDEWIDALVTWFTHE
      SAD,TO,RIGHT,AN,SPIN,PIN,IN,IND,SEA,SEAT,EAT,ATE,TED,DAD,SHE,TO,SO,IN,USE,USER,SER,IAN,AN,DAN,AN,AND,DAN,AN,TO,USE,USER,SER,ERA,RAT,RATE,ATE,SEE,SEN,SENT,ATA,THE,TIDE,IDE,SER,TO,DAN,AN,THE,
      
      word matches: 49
      SADHTRISAEHIGOTYANEHIOIRSPINDHTMMSEATEDADLECNSOECUIEHTRIFSRRINUSEHEHIIANLTFUTOWLDANDATTBCLWIRRATOCIEDNOCMDOILDANCHTRIUSEHATEHSAGSASEETLSENTUATATOETIDESEUDLDHTMMSEHTRIDANEHDEWIDALVTWFTOE
      SAD,TRI,GOT,AN,SPIN,PIN,IN,IND,SEA,SEAT,EAT,ATE,TED,DAD,SO,TRI,IN,USE,IAN,AN,TO,DAN,AN,AND,RAT,TO,NO,OIL,DAN,AN,TRI,USE,HAT,HATE,ATE,SEE,SEN,SENT,ATA,TO,TOE,TIDE,IDE,TRI,RID,DAN,AN,TO,TOE,
      
      word matches: 49
      SARDTHISAEDIGOTYANEDIOIHSPINRDTMMSEATERARLECNSOECUIEDTHIFSHHINUSEDEDIIANLTFUTOWLRANRATTBCLWIHHATOCIERNOCMROILRANCDTHIUSEDATEDSAGSASEETLSENTUATATOETIRESEURLRDTMMSEDTHIRANEDREWIRALVTWFTOE
      THIS,HIS,DIG,GOT,AN,SPIN,PIN,IN,SEA,SEAT,EAT,ATE,ERA,SO,IN,USE,USED,IAN,AN,TO,RAN,AN,RAT,HAT,TO,NO,OIL,RAN,AN,USE,USED,DATE,ATE,TED,SEE,SEN,SENT,ATA,TO,TOE,TIRE,IRA,IRAN,RAN,AN,DREW,IRA,TO,TOE,
      
      word matches: 53
      SADRTHISAERIGOTYANERIOIHSPINDRTMMSEATEDADLECNSOECUIERTHIFSHHINUSERERIIANLTFUTOWLDANDATTBCLWIHHATOCIEDNOCMDOILDANCRTHIUSERATERSAGSASEETLSENTUATATOETIDESEUDLDRTMMSERTHIDANERDEWIDALVTWFTOE
      SAD,THIS,HIS,GOT,AN,RIO,SPIN,PIN,IN,IND,SEA,SEAT,EAT,ATE,TED,DAD,SO,IN,USE,USER,SER,IAN,AN,TO,DAN,AN,AND,HAT,TO,NO,OIL,DAN,AN,USE,USER,SER,ERA,RAT,RATE,ATE,SEE,SEN,SENT,ATA,TO,TOE,TIDE,IDE,SER,DAN,AN,TO,TOE,
      
      word matches: 56
      SIRATONSIEANGHTYIDEANHNOSPNDRATMMSEITERIRLECDSHECUNEATONFSOONDUSEAEANNIDLTFUTHWLRIDRITTBCLWNOOITHCNERDHCMRHNLRIDCATONUSEAITEASIGSISEETLSEDTUITITHETNRESEURLRATMMSEATONRIDEAREWNRILVTWFTHE
      SIR,IRA,RAT,TO,TON,ON,ONS,SIE,AN,IDE,IDEA,DEAN,AN,NO,RAT,SHE,EAT,TO,TON,ON,SO,SOON,ON,USE,SEA,AN,ANN,RID,NO,RID,CAT,TO,TON,ON,USE,SEA,TEA,SIG,SEE,TIT,THE,RAT,SEA,SEAT,EAT,TO,TON,ON,RID,RIDE,IDE,IDEA,DEAR,EAR,ARE,THE,
      
      word matches: 57
      STIRODASTERAGNOYTHERANADSPAHIROMMSETOEITILECHSNECUAERODAFSDDAHUSERERAATHLOFUONWLITHITOOBCLWADDTONCAEIHNCMINALITHCRODAUSERTOERSTGSTSEEOLSEHOUTOTONEOAIESEUILIROMMSERODAITHERIEWAITLVOWFONE
      ROD,DAS,ERA,NO,THE,HER,ERA,RAN,AN,ANA,SPA,SET,TO,TOE,TIL,TILE,ROD,USE,USER,SER,ERA,OF,ON,LIT,HIT,TO,TOO,ADD,TO,TON,ON,MIN,IN,LIT,ROD,AUS,USE,USER,SER,TO,TOE,SEE,OUT,TO,TO,TON,TONE,ON,ONE,NEO,SER,ROD,THE,HER,WAIT,ON,ONE,
      
      word matches: 59
      HTARODSHTERSGNOYTIERSNSDHPSIAROMMHETOEATALECIHNECUSERODSFHDDSIUHERERSSTILOFUONWLATIATOOBCLWSDDTONCSEAINCMANSLATICRODSUHERTOERHTGHTHEEOLHEIOUTOTONEOSAEHEUALAROMMHERODSATIERAEWSATLVOWFONE
      TAR,ROD,NO,TIE,TIER,PSI,TO,TOE,EAT,ATA,TALE,USE,USER,SER,ROD,HER,HERE,TIL,OF,ON,LAT,ATI,TO,TOO,TO,TON,ON,SEA,IN,MAN,AN,LAT,ATI,ROD,HER,TO,TOE,THE,THEE,OUT,TO,TO,TON,TONE,ON,ONE,NEO,ALA,HER,HERO,ROD,SAT,ATI,TIE,TIER,ERA,SAT,ON,ONE,
      
      word matches: 61
      STARODHSTERHGNOYTIERHNHDSPHIAROMMSETOEATALECISNECUHERODHFSDDHIUSERERHHTILOFUONWLATIATOOBCLWHDDTONCHEAINCMANHLATICRODHUSERTOERSTGSTSEEOLSEIOUTOTONEOHAESEUALAROMMSERODHATIERAEWHATLVOWFONE
      STAR,TAR,ROD,NO,TIE,TIER,PHI,SET,TO,TOE,EAT,ATA,TALE,HER,HERO,ROD,USE,USER,SER,TIL,OF,ON,LAT,ATI,TO,TOO,TO,TON,ON,IN,MAN,AN,LAT,ATI,ROD,USE,USER,SER,TO,TOE,SEE,OUT,TO,TO,TON,TONE,ON,ONE,NEO,ALA,SER,ROD,HAT,ATI,TIE,TIER,ERA,WHAT,HAT,ON,ONE,
      
      word matches: 64
      SIRANOTSIEATGHNYIDEATHTOSPTDRANMMSEINERIRLECDSHECUTEANOTFSOOTDUSEAEATTIDLNFUNHWLRIDRINNBCLWTOOINHCTERDHCMRHTLRIDCANOTUSEAINEASIGSISEENLSEDNUININHENTRESEURLRANMMSEANOTRIDEAREWTRILVNWFNHE
      SIR,IRA,IRAN,RAN,AN,NO,NOT,SIE,EAT,IDE,IDEA,DEATH,EAT,TO,RAN,AN,IN,SHE,CUT,CUTE,TEA,AN,NO,NOT,SO,USE,SEA,EAT,FUN,RID,IN,INN,TO,TOO,IN,RID,CAN,AN,NO,NOT,USE,SEA,IN,SIG,SEE,SEEN,IN,IN,RAN,AN,SEA,SEAN,AN,NO,NOT,TRI,RID,RIDE,IDE,IDEA,DEAR,EAR,ARE,TRI,
      
      word matches: 67
      INASODEINTSEGROYNHTSEREDIPEHASOMMITNOTANALTCHIRTCUETSODEFIDDEHUITSTSEENHLOFUORWLANHANOOBCLWEDDNORCETAHRCMARELANHCSODEUITSNOTSINGINITTOLITHOUNONORTOEATITUALASOMMITSODEANHTSATWEANLVOWFORT
      IN,SO,IN,ROY,SER,RED,DIP,SO,NO,NOT,TAN,AN,ANA,ALT,CHI,SO,ITS,SEE,SEEN,OF,LAN,AN,AN,NO,WE,WED,NO,NOR,MAR,ARE,REL,LAN,AN,SO,ITS,NO,NOT,SIN,SING,IN,ING,IN,TO,LIT,THOU,NO,NON,ON,NO,NOR,TO,TOE,EAT,ATI,TIT,ALA,LAS,SO,ITS,SO,DEAN,AN,SAT,WE,AN,FOR,FORT,
      
      word matches: 71
      INASOHEINTSEGROYNDTSEREHIPEDASOMMITNOTANALTCDIRTCUETSOHEFIHHEDUITSTSEENDLOFUORWLANDANOOBCLWEHHNORCETADRCMARELANDCSOHEUITSNOTSINGINITTOLITDOUNONORTOEATITUALASOMMITSOHEANDTSATWEANLVOWFORT
      IN,SO,IN,ROY,SER,HIP,DAS,SO,NO,NOT,TAN,AN,ANA,ALT,DIRT,SO,ITS,SEE,SEEN,END,OF,LAN,LAND,AN,AND,DAN,AN,NO,WE,NO,NOR,MAR,ARE,REL,LAN,LAND,AN,AND,SO,ITS,NO,NOT,SIN,SING,IN,ING,IN,TO,LIT,NO,NON,ON,NO,NOR,TO,TOE,EAT,ATI,TIT,ALA,LAS,SO,ITS,SO,AN,AND,SAT,WE,AN,FOR,FORT,
      
      word matches: 76
      INAHOSEINTHEGROYNDTHERESIPEDAHOMMITNOTANALTCDIRTCUETHOSEFISSEDUITHTHEENDLOFUORWLANDANOOBCLWESSNORCETADRCMARELANDCHOSEUITHNOTHINGINITTOLITDOUNONORTOEATITUALAHOMMITHOSEANDTHATWEANLVOWFORT
      IN,HOSE,IN,THE,ROY,THE,THERE,HER,HERE,SIP,NO,NOT,TAN,AN,ANA,ALT,DIRT,THOSE,HOSE,THE,THEE,END,OF,LAN,LAND,AN,AND,DAN,AN,NO,WE,NO,NOR,MAR,ARE,REL,LAN,LAND,AN,AND,CHO,CHOSE,HOSE,NO,NOT,NOTHING,THIN,THING,IN,ING,IN,TO,LIT,NO,NON,ON,NO,NOR,TO,TOE,EAT,ATI,TIT,ALA,THOSE,HOSE,SEA,SEAN,AN,AND,THAT,HAT,WE,AN,FOR,FORT,
      
    • The output reveals some words that you can use to start the decryption process. Once you have some of the letters, you can iteratively work to get the rest.

    • The most common letter in the ciphertext does not correspond to E.

    • Remember, there are no spaces in the ciphertext – the 5-letter “words” above are simply to make it easier to copy. In other words, you can think of the above ciphertext as one long line of characters.

Problem 2: Transposition Cipher Decryption

a. Read the Wikipedia article on transposition ciphers, recreated here.

b. Decipher the following message, which is encrypted using a “Route Cipher” with the following features:

  • The 70-character plaintext was written into a 10-wide and 7-high grid
  • It was encrypted with the pattern, “starting at the bottom left, read letters diagonally down and to the right. After reading a diagonal, start at the next row up, and read it down and to the right, etc.”
DUDEN EEVAS ETERE GVYRO RNIEO GUTEV RUONY VEGDN DOEYO ONAUR ONWAN GUNNR OUANN PLNNA
  • Hint: Start by creating a grid of 10 across and 7 down, and then read off the ciphertext into the grid. Without a grid, this is tricky to get correct! (A spreadsheet works well for this)