Back in the 2007 time frame, I was writing a cipher-solving program called CipherExplorer. The program works reasonably well. It’s capable of solving the Zodiac Killer’s 408 cipher and other homophonic substitution ciphers comparable to the apparent strength of the 340. Of course, the main goal was to find a solution to the 340, and, in that respect, it failed. But then again, so has every other effort thus far…

As part of the work of testing and developing CipherExplorer, I also wrote a Perl script to generate Zodiac-Killer-like ciphers with arbitrary lengths and symbol counts. This script was called gen_cipher.pl. A version of it was released with the well-known, popular, and successful cipher solver, zkdecrypto (which I, otherwise, was not a part of).

Recently, I’ve taken gen_cipher.pl and converted it to javascript such that it can work in a browser-based environment. After wrapping it in some html, I’m now rebranding it as the:

Zodiac Killer Cipher Generator

Simply enter some text, pick your options, hit the “generate” button, and voila: your very own homophonic substitution cipher.

I’ll probably add some bells and whistles in the future, but even now, it’s pretty functional.

As an example, I’ve enciphered the first part of this post using characteristics similar to the Zodiac-Killer’s 340 cipher. As can be seen from the solution, the generator strips out all numbers (and any other non-letter characters). Here are the resulting outputs:

CIPHER

   3  53   1   0  61  32  12  35  47  42   6  11  31   7  62  18  29
  30  25  58  50  55  58  59  61  46   6  38  60  50  28  61  23  35
  26  59  19  37  57  27  61  32  60  40  59  52  60  59  39  11   1
  39  24  57  15  10   1   8  23  35  30  59  47  56  40  57  36  62
  47  16  21  44  47  23  62  37  60  62  18  29  58  52  62   0  55
  59  31  50  19  37  32  50   3  57  20  58   4  24  57  61  46  55
  28  51  23  53   3  57  47  37   7  34  52  57  41   6  32  60   9
  35  47  45  13  10   6  53  49   0  25  57  57   4  17  33  28  61
  40  43  26  62  51  32  14   5  42  43  26  48  35   5  11  52  23
  43  52   2   8  49  33  22   3  55  46  61  46  22  54   8  13  38
  49  61  40  44  15  16  55  49  52  29  40  50  17  51   3  57  30
   9  37  46  44  47  53  23  40  51  17  26  38  21  55   9  59  31
  38  60  42  35  52   7   9  43  30   5   7  28   5  22  48  34  30
  46  35  47  29  51  25   2  60  13  53  24  58  51  55   9  37   7
  25  32  14  53  19  36  57  22  54  25  13  38  54  52  46  44  31
  39  38  10  25   2  21  43  39  46  48  31  33  40  26  49  54  25
   9   7  53   8  57  31  14   3  22  21  21  44  26  32  39  60  53
  61  38  55  37  44  50  33  47  41  15  62  20  13  54  35  31  62
  47   7   7  36  59  42  12  44  22  34   7  50  62  53  34  23  39
  17  34  46   0  59  47  22   6  43  13  10  28  48  48  56  19  41

SOLUTION

BACKINTHETIMEFRAM
EIWASWRITINGACIPH
ERSOLVINGPROGRAMC
ALLEDCIPHEREXPLOR
ERTHEPROGRAMWORKS
REASONABLYWELLITS
CAPABLEOFSOLVINGT
HEZODIACKILLERSCI
PHERANDOTHERHOMOP
HONICSUBSTITUTION
CIPHERSCOMPARABLE
TOTHEAPPARENTSTRE
NGTHOFTHEOFCOURSE
THEMAINGOALWASTOF
INDASOLUTIONTOTHE
ANDINTHATRESPECTI
TFAILEDBUTTHENAGA
INSOHASEVERYOTHER
EFFORTTHUSFARASPA
RIASLWHRKNPLWNHNG

Hopefully, people will find this cipher generator fun and, perhaps, useful.