// 原始程式來源: http://practicalcryptography.com/ciphers/enigma-cipher/ 網頁內的 javascript 程式碼 var c = console; var plaintext = 'ABCDEF'; c.log('>> plaintext2 : '+plaintext); var ciphertext = Encrypt(plaintext, 'AAA', 'AAA', '123', 'POMLIUKJNHYTGBVFREDC'); c.log('>> ciphertext : '+ciphertext); var plaintext2 = Encrypt(ciphertext, 'AAA', 'AAA', '123', 'POMLIUKJNHYTGBVFREDC'); c.log('>> plaintext2 : '+plaintext); function Encrypt(plaintext, keysettings, ringsettings, rotorsettings, plugboardsettings) { c.log('plaintext='+plaintext); c.log('keysetting='+keysettings); c.log('ringsetting='+ringsettings); c.log('plugboardsettings='+plugboardsettings+' len='+plugboardsettings.length); c.log('rotorsettings='+rotorsettings); // do some error checking if(plaintext.length < 1){ c.log("please enter some plaintext (letters and numbers only)"); return; } if(keysettings.length != 3){ c.log("Key settings must consist of 3 uppercase characters."); return; } if(ringsettings.length != 3){ c.log("Ring settings must consist of 3 uppercase characters."); return; } if(plugboardsettings.length > 26){ c.log("There cannot be more than 13 pairs in the plugboard settings."); return; } if(plugboardsettings.length % 2 != 0){ c.log("There must be an even number of characters in the plugboard settings."); return; } if(rotorsettings.length != 3){ c.log("Rotor settings must consist of 3 numbers 1-9."); return; } // interpret the rotor settings (strings 1-8 to int 0-7) var rotors = rotorsettings.split(""); rotors[0]=rotors[0].valueOf()-1;rotors[1]=rotors[1].valueOf()-1;rotors[2]=rotors[2].valueOf()-1; // parse plugboard settings, store as a simple substitution key var plugboard = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var parr = plugboard.split(""); for(i=0,j=1;i