Caesar Entschlüsselung?
Ich muss momentan eine HTML seite erstellen und weiss nicht mehr weiter. Ich habe den Verschlüsselungscode vorgegeben, weiss jedoch nicht wie ich den Entschlüsselungscode erstelle. Ich bitte um dringende Hilfe.
Vorgegebener Verschlüsselungscode:
<script language="JavaScript">
function Felder_leeren() {
document.form1.eingabe.value='';
document.form1.ausgabe.value='';
}
function verschluesseln() {
document.form1.eingabe.value=document.form1.eingabe.value.toUpperCase();
klartext=document.form1.eingabe.value;
verschiebung=eval(document.form1.verschiebung.value);
geheimtext="";
for (i=0; i<klartext.length ; i++ ) {
codeNr=klartext.charCodeAt(i);
neueCodeNr=codeNr+verschiebung;
if (neueCodeNr>90) {neueCodeNr=neueCodeNr-26;}
geheimtext=geheimtext+String.fromCharCode(neueCodeNr);
}
document.form1.ausgabe.value = geheimtext;
}
4 Antworten
Du hast doch die Verschlüsselung da, verstehe das Verfahren und mache die Änderungen wieder rückgängig.
Wie du siehst iteriert die for Schleife über jeden Character in deinem String. Dann wird zu dem ASCII Code des Charakters der Wert Verschiebung dazu addiert und dann wieder das Zeichen zu dem neuen Ascii Code gesucht. Das if am Schluss ist nur damit das Verfahren innerhalb der gültigen Zeichen bleibt.
Die Entschlüsselung ist also genau das selbe nur addierst du diesemal den Wert Verschiebung nicht sondern subtrahierst ihn und du bist fertig. Das if am Ende musst du dann natürlich dementsprechend anpassen.
Und nur zur Vollständigkeit deine Frage hat etwas mit Javascript und nicht mit HTML zu tun.
Du fragst ja eher nach Logik als nach Syntax wenn ich das richtig verstehe und daher bin ich mal so dreist und Antworte ohne deinen Code in der jetzigen unschönen Form zu lesen:
Für Verschlüsselung:
Wenn mit Ascii Zahl: Addiere eine Zahl %26, um die Verschiebung vorzunehmen.
CharToAscii('A') = 65
65 + 10 = 75
AsciiToChar(75)= 'K'
So oder so ähnlich wirst du das programmiert haben (und die benutzten Methoden natürlich auch).
Zum Endschlüsseln musst du als Parameter übergeben, um wie viel versetzt wurde. Sonst musst du alle 26 Möglichkeiten ausprobieren und nachsehen, ob ein existierendes Wort sich gebildet hat. Das zu machen ist aber umständlicher und vermutlich nicht Teil deiner Aufgabe. Ich ignoriere das erstmal hier:
decode(char Buchstabe, int Versatz) {
CharToAscii(Buchstabe) = X
X - Versatz = Y
return AsciiToChar(Y)
}
Das addieren und subtrahieren ist in echt "etwas" schwieriger, da du Abfangen musst, dass er nicht über das Maximum hinaus läuft.
Wenn du genauer beschreibst, wo du das Problem hast, bekommst du eine spezifischere Antwort
Beim entschlüsseln einfach um (26 - Verschiebung) verschlüsseln.
Also bei abc wird einmal verschlüsselt, dann wird bcd raus. bcd jetzt 25 mal verschlüsselt ergibt wieder abc.
Was genau ist die Frage?
Du kannst ein Array machen, in dem gespeichert wird, ob Buchstaben groß, oder klein sind