Bei Rot-13 handelt es sich um eine Verschlüsselungsmethode der einfachsten Art und Weise, wie sie vom Prinzip her schon von Gaius Julius Cäsar und im Atbasch-Code verwendet wurde: Der Verschiebechiffre, oft auch als Cäsarchiffre bezeichnet. Nach der heutigen Systematik fällt er in die Klasse der monographischen/monoalphabetischen Substitutionschiffren, weil nur an Hand eines Alphabetes die Klartextzeichen ersetzt werden. Da hierbei jedes Zeichen immer durch dasselbe Zeichen im Chiffre rerpäsentiert wird, eignet sich Rot-13 nicht wirklich für die Verschlüsselung (bspw. bleibt die charakteristische Häufigkeitsverteilung von Zeichen erhalten).
Im vorliegenden Falle von Rot-13 wird jeder Buchstabe einfach durch den Buchstaben, welcher 13 Stellen rechts von ihm im Alphabet steht, ersetzt. Am Ende des Alphabets wird wieder zum Anfang gesprungen, daher der Name Rotation. Da als Schlüssel nur die Verschiebung im Alphabet, nicht jedoch der ASCII-Code zu Grunde gelegt wird, bleiben Zahlen, Umlaute, Sonderzeichen, Satzzeichen, Wortzwischenräume und Zeilenumbrüche vollkommen unbeeinflusst.
Obwohl man dieses Verfahren wohl in keinster Weise als sicher bezeichnen kann, findet es im Usenet als Schutz vor unbeabsichtigtem Lesen durchaus seine berechtigte Anwendung. Bei der Diskussion in den Gruppen über aktuelle Dinge wie Bücher oder Filme besteht somit die Möglichkeit anderen die Möglichkeit zu geben, sich vor dem umgewollten Lesen von Zitaten der spannensten Stellen zu schützen. Daher hat jeder vernünftige Newsreader eine Rot-13-Funktion.
Klartext | : | K | |
Verschlüsselter Text | : | V | |
Kodierung | |||
1 | V | = | Rot-13(K) |
Dekodierung | |||
2 | K | = | Rot-13(V) |
3 (1 in 2) | K | = | Rot-13(Rot-13(K)) |
Die zweimalige Anwendung derselben Funktion liefert wieder den Ausgangstext (involutorische Verschlüsselung
). Diese Eigenschaft hat er mit der alttestamentarischen Verschlüssung, dem Atbasch-Chiffre, gemein.
Die Dekodierung erfolgt durch erneute Anwendung von Rot-13, da die Verschiebung genau 26 ÷ 2 = 13 beträgt.
Kodierung und Dekodierung lassen sich auch ohne Rechenarbeit an Hand einer einfachen Tabelle durchführen. Das zu bearbeitende Zeichen in der Tabelle suchen und das Ergebnis in der anderen Zeile ablesen:
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 |
Text | M | a | r | i | a | J | u | a | n | a | k | o | m | m | t | n | a | c | h | t | s | ! | |||
Position | 12 | 0 | 17 | 8 | 0 | 9 | 20 | 0 | 13 | 0 | 10 | 14 | 12 | 12 | 19 | 13 | 0 | 2 | 7 | 19 | 18 | ! | |||
Addition von 13 | 25 | 13 | 30 | 21 | 13 | 22 | 33 | 13 | 26 | 13 | 23 | 27 | 25 | 25 | 32 | 26 | 13 | 15 | 20 | 32 | 31 | ! | |||
Modulo 26 | 25 | 13 | 4 | 21 | 13 | 22 | 7 | 13 | 0 | 13 | 23 | 1 | 25 | 25 | 6 | 0 | 13 | 15 | 20 | 6 | 5 | ! | |||
Znevn Whnan xbzzg anpugf! |
Eigentlich nimmt die Berechnung keine Rücksicht auf Groß- oder Kleinschreibung, allerdings wird es so gehandhabt, daß Großbuchstaben durch kodierte Großbuchstaben und Kleinbuchstaben durch kodierte Kleinbuchstaben ersetzt werden.
Ausführliche Gedanken zur Sicherheit von Doppel-Rot13 finden sich inklusive von Programmcode bei [1].
Nachfolgend Möglichkeiten für eine programmtechnsiche Umsetzung von Rot-13 unter Berücksichtigung von Groß- und Kleinschreibung. Nicht im Zeichenraum enthaltene Zeichen werden unverändert durchgereicht.
Im Terminal als Einzeiler entweder als Pipeline (|) oder als here-String:
#:~>echo 'Maria Juana kommt nachts!' | tr 'a-zA-Z' 'n-za-mN-ZA-M' Znevn Whnan xbzzg anpugf! #:~>
#:~>tr 'a-zA-Z' 'n-za-mN-ZA-M' <<< 'Maria Juana kommt nachts!' Znevn Whnan xbzzg anpugf! #:~>
Python bietet vielfältige Möglichkeiten der Umsetzung, kurze, elegante und lange weniger elegante:
#!/usr/bin/env python3.2 # -*- coding: utf-8 -*- # def Rot13 (Text): Zeichenraum='ABCDEFGHIJKLMNOPQRSTUVWXYZ' Chiffre='' l=13 for i in Text: p = Zeichenraum.find(i) if p > -1: Chiffre += Zeichenraum[(p+l)%26] else: p = Zeichenraum.find(i.swapcase()) if p > -1: Chiffre += Zeichenraum[(p+l)%26].swapcase() else: Chiffre += i return Chiffre # Alternativ # import string # Zeichenraum entfällt, dafür dann string.ascii_uppercase
#!/usr/bin/env python3.2 # -*- coding: utf-8 -*- # import string def Rot13 (Text): return Text.translate(Text.maketrans(\ 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',\ 'NOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyzabcdefghijklm'))
#!/usr/bin/env python3.2 # -*- coding: utf-8 -*- # # Allgemeine Form eines Verschiebechiffres für ASCII # Berücksichtigt Groß- und Kleinbuchstaben import string def Verschiebechiffre(Text,n=13): n = n%26 s1 = string.ascii_uppercase + string.ascii_lowercase s2 = string.ascii_uppercase[n:]+string.ascii_uppercase[:n]+\ string.ascii_lowercase[n:]+string.ascii_lowercase[:n] return Text.translate(Text.maketrans(s1,s2))
#!/usr/bin/env python3.2 # -*- coding: utf-8 -*- # import codecs def Rot13 (Text): return codecs.encode(Text,'rot_13')
#!/usr/bin/env python2.6 # -*- coding: utf-8 -*- # def Rot13 (Text): return Text.encode('Rot13')
Diese Seite wurde vom Besucher am 05.10.2024
um 05:21:16
Uhr von einem Rechner mit der TCP/IP-Adresse 44.222.134.250
mit der Browserkennung CCBot/2.0 (https://commoncrawl.org/faq/)
aus der Domäne (none)
kommend aufgerufen. Als zuletzt besuchte Webseite wurde (none)
übermittelt.
Stand vom 22.04.2011 | GnuPG (PGP) ID: 0xA4A5103F Fingerabdruck: 0E01 902F 3EC7 B119 9492 D196 BEB5 4D5D A4A5 103F | Datenschutzhinweis | © seit 2001, Prüfziffernberechnung.DE |