Vigenère-Chiffre

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Javascript</language>
<code id="5d49e0654067a">
var Gitter = {
 "A" : ["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" : ["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"],
 "C" : ["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","B"],
 "D" : ["D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C"],
 "E" : ["E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D"],
 "F" : ["F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E"],
 "G" : ["G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F"],
 "H" : ["H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G"],
 "I" : ["I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H"],
 "J" : ["J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I"],
 "K" : ["K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J"],
 "L" : ["L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K"],
 "M" : ["M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L"],
 "N" : ["N","O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M"],
 "O" : ["O","P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N"],
 "P" : ["P","Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O"],
 "Q" : ["Q","R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P"],
 "R" : ["R","S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q"],
 "S" : ["S","T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R"],
 "T" : ["T","U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S"],
 "U" : ["U","V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T"],
 "V" : ["V","W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U"],
 "W" : ["W","X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V"],
 "X" : ["X","Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W"],
 "Y" : ["Y","Z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X"],
 "Z" : ["Z","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"]
};

function encrypt(Eingabe,Key){
  var Ausgabe = "";
  var KeyIndex = 0;
  for (var i=0; i < Eingabe.length; i++){
    var EingabeBuchstabe = Eingabe[i].toUpperCase();
    // Alles was nicht A-Z ist, direkt so ausgeben ohne Verschlüsselung
    if(EingabeBuchstabe.match(/[^A-Z]/)) {
      Ausgabe = Ausgabe + EingabeBuchstabe;
      continue; 
    }
    var KeyBuchstabe = Key[KeyIndex].toUpperCase();
    var AusgabeBuchstabe = Gitter[EingabeBuchstabe][KeyBuchstabe.charCodeAt(0) - 65];
    Ausgabe = Ausgabe + AusgabeBuchstabe;
    KeyIndex++;
    // wieder vorn anfangen wenn Key aufgebraucht ist 
    if(KeyIndex >= Key.length) KeyIndex = 0; 
  }
  return Ausgabe;
}

function decrypt(Eingabe,Key){
  var Ausgabe = "";
  var KeyIndex = 0;
  for (var i=0; i < Eingabe.length; i++){
    var CryptedBuchstabe = Eingabe[i].toUpperCase();
    if(CryptedBuchstabe.match(/[^A-Z]/)) {
      Ausgabe = Ausgabe + CryptedBuchstabe;
      continue; 
    }
    var KeyBuchstabe = Key[KeyIndex].toUpperCase();
    for (var k in Gitter){
      if(Gitter[k][KeyBuchstabe.charCodeAt(0) - 65] == CryptedBuchstabe){
        Ausgabe = Ausgabe + k;
        break;
      }
    }  
    KeyIndex++;
    // wieder vorn anfangen wenn Key aufgebraucht ist 
    if(KeyIndex >= Key.length) KeyIndex = 0; 
  }
  return Ausgabe;
}
</code>

<run id="5d49e065406f6">
var Ausgabe1 = encrypt("MORGEN ABEND UM NEUN GEHT'S LOS.","EINFACH");
console.log("Verschlüsselt: "+Ausgabe1);
console.log("Entschlüsselt: "+decrypt(Ausgabe1,"EINFACH"));

console.log("Ausgabe erneut verschlüsseln mit Key2.");

var Ausgabe2 = encrypt(Ausgabe1,"SCHWER");
console.log("Verschlüsselt: "+Ausgabe2);

console.log("Nun das Ergebnis entschlüsseln mit Key1.");

var Ausgabe3 = decrypt(Ausgabe2,"EINFACH");

console.log("Entschlüsselt (Key1): "+Ausgabe3);

console.log("Nun kann das Ergebnis erneut entschlüsselt werden mit Key2.");

console.log("Entschlüsselt (Key2): "+decrypt(Ausgabe3,"SCHWER"));

console.log("Die Reihenfolge beim Einschlüsseln spielt dabei keine Rolle,\nob erst mit Key1 oder Key2 entschlüsselt wird.");

var Ausgabe3 = decrypt(Ausgabe2,"SCHWER");
console.log("Entschlüsselt (Key2): "+Ausgabe3);
console.log("Entschlüsselt (Key1): "+decrypt(Ausgabe3,"EINFACH"));

</run>