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>