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">
console.log("Alice möchte eine Nachricht verschicken.");
var Ausgabe1 = encrypt("MORGEN ABEND UM NEUN GEHT'S LOS.","EINFACH");
console.log("Verschlüsselt: "+Ausgabe1);
console.log("--> verschicken an Bob");

console.log("Bob verschlüsseln die Nachricht erneut mit seinem Key2.");
var Ausgabe2 = encrypt(Ausgabe1,"SCHWER");
console.log("Verschlüsselt: "+Ausgabe2);
console.log("<-- zurück an Alice");

console.log("Alice entschlüsseln die Nachricht mit ihrem Key1.");
var Ausgabe3 = decrypt(Ausgabe2,"EINFACH");
console.log("Entschlüsselt: "+Ausgabe3);

console.log("--> verschicken an Bob");

console.log("Bob entschlüsseln die Nachricht mit seinem Key2.");
console.log("Entschlüsselt: "+decrypt(Ausgabe3,"SCHWER"));

console.log("Bob hat die Nachricht erhalten, ohne je Key1 zu kennen.");
console.log("Alice hat die Nachricht übermittelt, ohne je Key2 zu kennen.");
</run>