Javascript
 

 Verschlüsselung

Auf dieser Seite kann man Texte zwischen den beiden Fenstern ver- oder entschlüsseln:

Klartext:
↓  ↓ Schlüsselwort:
↑   ↑
Codetext:
Sie können den Code unmittelbar aus diesem Formular per Email versenden.
Das funktioniert allerdings nur, wenn der Code nicht zu lang ist (ungefähr 60 Zahlencodes).
Code an     

Kurzanleitung

Zum Verschlüsseln eines Textes schreiben oder kopieren Sie ihn in das obere Feld "Klartext", geben Sie das Schlüsselwort in das dafür vorgesehene Feld ein und klicken Sie auf die Schaltfläche "Codieren".
Der verschlüsselte Text erscheint dann als Folge durch Kommata getrennter Zahlen im unteren Feld "Code".
Die Eingabefelder "Klartext" und "Schlüsselwort" werden gelöscht.

Um einen auf diese Weise verschlüsselten Text wieder zu entschlüsseln, kopieren Sie die durch Kommata getrennte Zahlenfolge in das Codefeld, geben dasjenige Schlüsselwort, das zum Verschlüsseln verwendet wurde, in das dafür vorgesehene Feld ein und klicken auf "Decodieren".
Der Klartext erscheint im Feld "Klartext".
Die Eingabefelder "Code" und "Schlüsselwort" werden gelöscht.

Nach dem Codieren steht die Einfügemarke im Feld zur Eingabe einer Emailadresse. Wenn der Code nicht zu lang ist (ca. 60 Codezahlen), können sie ihn direkt aus dem Formular versenden.
Andernfalls müssen sie ihn manuell durch Kopieren in die Zwischenablage in ein Emailprogramm übertragen.

Hintergrundwissen

Die Verschlüsselung ist symmetrisch, d.h. Sender und Empfänger müssen im Besitz des selben Schlüsselwortes sein.
Der Algorithmus verschlüsselt, indem die Zeichen des Klartextes oder genauer gesagt deren ASCII-Codes einer nach dem anderen mit den Zeichen bzw. deren ASCII-Codes des Schlüsselwortes "exklusiv oder" (XOR) miteinander verknüpft werden.
Das Ergebnis dieser Verknüpfungen ist der ausgegebene Code; es handelt sich um Zahlen zwischen 0 und 255. Beim Entschlüsseln Werden die Codezahlen wieder eine nach der anderen mit den ASCII-Codes des Schlüsselwortes XOR-verknüpft und es ergibt sich wieder der Klartext.
Da der Klartext in der Regel länger ist als das Schlüsselwort, wird das Schlüsselwort immer wieder von vorne verwendet.

XOR-Funktion

Werden zwei Bits miteinander 'exklusiv oder' verknüpft, ist das Ergebnis dann '1' oder 'wahr', wenn die beiden Bits unterschiedlich sind. Sind die Bits gleich, ist das Ergebnis '0' oder 'falsch':

a b a XOR b
0 0 0
0 1 1
1 0 1
1 1 0

Verschlüsselungsbeispiel

Klartext:
Dies ist ein Beispielsatz.
Schlüsselwort:
Schlüssel

Dies ist ein Beispielsatz.
SchlüsselSchlüsselSchlüsse

Es werden also 'exklusiv oder' verknüpft:
D mit S, i mit c, e mit h usw.

Die ersten Buchstaben noch einmal mit ASCII-Codes und ihren zugehörigen binären Darstellungen:

Klartextbuchstabe D i e s
Klartext ASCII-Code 68 105 101 115
Schlüsselbuchstabe S c h l
Schlüssel ASCII-Code 83 99 104 108
Klartext binär 01000100 01101001 01100101 01110011
Schlüssel binär 01010011 01100011 01101000 01101100
XOR-Verknüpfungscode 00010111 00001010 00001101 00011111
Code dezimal 23 10 13 31

Berechneter Code des gesamten Beispielsatzes:
23, 10, 13, 31, 220, 26, 0, 17, 76, 54, 10, 6, 76, 190, 22, 26, 22, 28, 58, 6, 4, 31, 157, 7, 9, 75

Probieren Sie, ob es stimmt, indem sie die Zahlenkolonne in das Decodierfeld kopieren, das Schlüsselwort "Schlüssel" eingeben und auf "Decodieren" klicken!
(Der Focus muss, um die Kopierfunktion nutzen zu können, auf einer der beiden Schaltflächen liegen; geben Sie dazu zuerst irgendetwas in zwei der drei Textfelder ein und betätigen Sie dann die Tab-Taste.)

Focus-Steuerung

Das Javascript-Programm enthält eine Steuerung des Focus:
Beim Aufruf der Seite wird die Einfügemarke im Klartextfeld positioniert ('onload' im body-tag).
Wenn Sie dieses Feld mit der Maus oder der Tabtaste verlassen, bewegt sich die Einfügemarke automatisch in das Schlüsselwortfeld, wenn Sie einen Klartext eingegeben haben; wenn nicht, steht der Cursor im Codefeld.
Für das Codefeld gilt das selbe sinngemäß.
Beim Verlassen des Schlüsselwortfeldes wird automatisch die richtige Schaltfläche angewählt, je nachdem ob Sie zusätzlich zum Schlüssel Klartext oder Code eingegeben haben.
Erst wenn eine der beiden Schaltflächen den Focus hat, können Sie wieder frei über die Maus verfügen, um z.B. Text zu markieren.

Leerzeichen in der XOR-Verknüpfung

Die XOR-Verknüpfung von ASCII-Codes hat folgende unter Verschlüsselungsaspekten kritische Eigenschaft:
Wenn man einen Buchstaben mit einem Leerzeichen XOR-verknüpft, ist das Ergebnis der selbe Buchstabe, nur von Groß- in Kleinschreibung oder umgekehrt umgewandelt.
Das liegt daran, dass sich die Bitmuster von Groß- und Kleinbuchstaben nur an einer Stelle unterscheiden, und dass das Bitmuster des Leerzeichens (ASCII-Code 32) genau an dieser Stelle eine '1' aufweist.
Als Konsequenz kann man das Schlüsselwort im codierten Text erkennen, wenn im Klartext eine entsprechend lange Folge von Leerzeichen steht.
Deshalb untersucht das Verschlüsselungsprogramm den Klartext auf Folgen von drei oder mehr Leerzeichen hintereinander. (Diese Zahl kann in der globalen Variablen 'anz_leerz' eingestellt werden.)
Wird eine solche Folge gefunden, erscheint eine Warnmeldung und die Leerzeichenfolgen werden vor dem verschlüsseln aus dem Klartext entfernt.

Javascript-Besonderheiten

Javascript bietet die Möglichkeit, mit Hilfe der Methode 'window.prompt("Aufforderungstext")' Benutzereingaben abzufragen.
Statt dessen wurde als Benutzerschnittstelle obiges html-Formular gewählt, weil das Javascript-Eingabefenster keine Zeilenumbrüche verarbeiten kann. Wenn Sie einen Code per Email versenden, werden aber unter Umständen Zeilenumbrüche hinzugefügt.
Außerdem lassen sich in einem html-Formular verdeckte Eingaben für das Schlüsselwort realisieren.

Offenbar gibt es eine Begrenzung bei der Textlänge, die ein html-Formular mit Hilfe von "mailto:" und "body"-Parameter an ein Emailprogramm übergeben kann. Jedenfalls erzeugt der Versuch, den Code direkt aus dem Formular zu versenden, eine Fehlermeldung, wenn er eine gewisse Zeichenzahl überschreitet.

Besonderheiten Internet-Explorer

Der Internetexplorer interpretiert alle Kombinationen der ASCII-Codes 10 und 13 (10 = Line Feed, LF, Zeilenvorschub; 13 = Carriage Return, CR, Wagenrücklauf) als vollständigen Zeilenumbruch mit den zwei Zeichen CR und LF:

CR + LF → CR + LF
LF + CR → CR + LF
LF → CR + LF
CR → CR + LF

Da das Programm alle Codezeichen einzeln in Buchstaben umwandelt, führt diese Eigenschaft des Internet-Explorers dazu, dass beim Auftauchen des ersten der beiden Zeichen schon ein CR + LF in das Klartextfenster geschrieben wird, und beim zweiten erneut. Die Anzahl der Zeilenumbrüche würde sich also beim Decodieren verdoppeln. Aus diesem Grund wird beim Erkennen eines LF-Zeichens im Code dieses nicht in Klartext übersetzt.

Die Bedienoberfläche des Programms hätte sich viel einfacher mit nur einem Fenster für Klartext und Code und nur einer Schaltfläche für Codieren und Decodieren gestalten lassen, wenn der Internetexplorer für jeden ASCII-Code zwischen 0 und 255 ein Zeichen darstellen würde.
Dann hätte man den Codiervorgang nämlich um den Schritt ergänzen können, aus der Zahl wieder ein Zeichen zu machen und die Prozesse für Codieren und Decodieren wären exakt identisch gewesen.
Außerdem wäre der Code dann nur ein Drittel so lang (ein Zeichen statt eine zwei- bis dreistellige Zahl plus Komma), was das direkte Versenden längerer Codes erlauben würde.
Da der Internet Explorer aber eben nicht jede zahl zwischen 0 und 255 als Zeichen darstellt, ist das Programm so wie es ist.

Verwendung des Programms

Sie können diese Internetseite und damit das Programm selbstverständlich frei verwenden.
Schauen Sie sich den Quelltext an, wenn Sie an der Programmierung interessiert sind; die Scripts sind kommentiert.

Ich übernehme keinerlei Verantwortung für die Richtigkeit der Ver- und Entschlüsselung oder sonstigen Fehlerfreiheit des Programms.
Es handelt sich um einen sehr einfachen Verschlüsselungsalgorithmus, dessen Schutz nicht dem Stand der Technik asynchroner Verschlüsselung entspricht.


Um ein Mindestmaß an Sicherheit zu gewährleisten, verwenden Sie lange Schlüsselworte und tauschen Sie diese auf einem sicheren Kanal zwischen Sender und Empfänger aus.

Um sicher zu sein, dass Sie das Schlüsselwort richtig getippt haben, können Sie nach dem Codieren das Schlüsselwort erneut eingeben und den gerade erzeugten Code wieder decodieren.
Kopieren Sie breits vorher den erzeugten Code, damit sie ihn im wahrscheinlichen Erfolgsfall so verwenden können.

Ich würde mich freuen, wenn Sie mir Kommentare zu diesem Programm zusenden würden.




Home
Falls diese Seite ohne Navigationsleiste angezeigt wird, aktivieren Sie Javascript oder klicken Sie hier!