Skip to content

pebois/enigma

Repository files navigation

Enigma Machine

Encrypt

Basic settings.

var input = 'ABCDEFGHIJKLMNOPQRSTUVWXYZAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBABCDEFGHIJKLMNOPQRSTUVWXYZ';
var output = 'BJELRQZVJWARXSNBXORSTNCFMEYHCXTGYJFLINHNXSHIUNTHEORXOPLOVFEKAGADSPNPCMHRVZCYECDAZIHVYGPITMSRZKGGHLSRBLHL';
var machine = new Enigma(['I', 'II', 'III'], 'B', [0, 0, 0], [0, 0, 0]);
assert.ok(output === machine.encrypt(input));

Varied rotors.

var input = 'ABCDEFGHIJKLMNOPQRSTUVWXYZAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBABCDEFGHIJKLMNOPQRSTUVWXYZ';
var output = 'FOTYBPKLBZQSGZBOPUFYPFUSETWKNQQHVNHLKJZZZKHUBEJLGVUNIOYSDTEZJQHHAOYYZSENTGXNJCHEDFHQUCGCGJBURNSEDZSEPLQP';
var machine = new Enigma(['VII', 'V', 'IV'], 'B', [10, 5, 12], [1, 2, 3]);
assert.ok(output === machine.encrypt(input));

Long input.

var input = new Array(500).fill('A').join('');
var output = ('YJKJMFQKPCUOCKTEZQVXYZJWJFROVJMWJVXRCQYFCUVBRELVHRWGPYGCHVLBVJEVTTYVMWKJFOZHLJEXYXRDBEVEHVXKQSBPYZN' +
    'IQDCBGTDDWZQWLHIBQNTYPIEBMNINNGMUPPGLSZCBRJULOLNJSOEDLOBXXGEVTKCOTTLDZPHBUFKLWSFSRKOMXKZELBDJNRUDUCO' +
    'TNCGLIKVKMHHCYDEKFNOECFBWRIEFQQUFXKKGNTSTVHVITVHDFKIJIHOGMDSQUFMZCGGFZMJUKGDNDSNSJKWKENIRQKSUUHJYMIG' +
    'WWNMIESFRCVIBFSOUCLBYEEHMESHSGFDESQZJLTORNFBIFUWIFJTOPVMFQCFCFPYZOJFQRFQZTTTOECTDOOYTGVKEWPSZGHCTQRP' +
    'GZQOVTTOIEGGHEFDOVSUQLLGNOOWGLCLOWSISUGSVIHWCMSIUUSBWQIGWEWRKQFQQRZHMQJNKQTJFDIJYHDFCWTHXUOOCVRCVYOHL');
var machine = new Enigma(['III', 'VI', 'VIII'], 'B', [3, 5, 9], [11, 13, 19]);
assert.ok(output === machine.encrypt(input));

Plug board

4 plugs.

var input = 'AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';
var output = 'QREBNMCYZELKQOJCGJVIVGLYEMUPCURPVPUMDIWXPPWROOQEGI';
var machine = new Enigma(['I', 'II', 'III'], 'B', [0, 0, 0], [0, 0, 0], 'AC FG JY LW');
assert.ok(output === machine.encrypt(input));

6 plugs.

var input = 'WRBHFRROSFHBCHVBENQFAGNYCGCRSTQYAJNROJAKVKXAHGUZHZVKWUTDGMBMSCYQSKABUGRVMIUOWAPKCMHYCRTSDEYTNJLVWNQY';
var output = 'FYTIDQIBHDONUPAUVPNKILDHDJGCWFVMJUFNJSFYZTSPITBURMCJEEAMZAZIJMZAVFCTYTKYORHYDDSXHBLQWPJBMSSWIPSWLENZ';
var machine = new Enigma(['IV', 'VI', 'III'], 'B', [0, 10, 6], [0, 0, 0], 'BM DH RS KN GZ FQ');
assert.ok(output === machine.encrypt(input));

10 plugs.

var input = 'RNXYAZUYTFNQFMBOLNYNYBUYPMWJUQSBYRHPOIRKQSIKBKEKEAJUNNVGUQDODVFQZHASHMQIHSQXICTSJNAUVZYIHVBBARPJADRH';
var output = 'CFBJTPYXROYGGVTGBUTEBURBXNUZGGRALBNXIQHVBFWPLZQSCEZWTAWCKKPRSWOGNYXLCOTQAWDRRKBCADTKZGPWSTNYIJGLVIUQ';
var machine = new Enigma(['I', 'II', 'III'], 'B', [0, 1, 20], [5, 5, 4], 'AG HR YT KI FL WE NM SD OP QJ');
assert.ok(output === machine.encrypt(input));

Decrypt

Message.

var secret = 'THEONLYWINNINGMOVEISNOTTOPLAY';
var first = new Enigma(['I', 'II', 'III'], 'B', [0, 0, 0], [0, 0, 0]);
var second = new Enigma(['I', 'II', 'III'], 'B', [0, 0, 0], [0, 0, 0]);
assert.ok(second.encrypt(first.encrypt(secret)) === secret);

Notes

  • Typescript port of Mike Pound's Enigma Machine

Resources

  1. Wikipedia
  2. Project page
  3. Youtube video

About

Enigma machine

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors