Substitution CiphersMono-alphabetic substitutionAllgemein werden bei Substitutionsalgorithmen "Substitution Ciphers" die Zeichen im Klartext durch andere Zeichen ersetzt (substituiert). Bei der monoalphabetischen Chiffrierung wird jedes Zeichen genau auf ein anderes Zeichen abgebildet. Shift Cipher - Ceasar Ciphers"Verschiebechiffren", sog. shift ciphers wurden schon von
Julius Caesar (100 bis 44 v. Chr.) benutzt um Nachrichten
zu verschlüsseln.
Es ist die einfachste Art der Verschlüsselung und wird
meinst als eine alphabetische Verschlüsselung (modulo 26)
implementiert.
Dabei wird das Alphabet von 0 bis 25 nummeriert (A = 0) und
die erhaltenen Werte werden um einen bestimmten Wert erhöht.
Dieser Wert k wird zur Entschlüsselung wieder abgezogen.
Beispiel mit k = 1:
X = HALLO WELT
e(X) = IBMMP XFMU
e(e(X)) = JCNNQ YGNV
X : 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
e(X) : 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
e(e(X)) : 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
Funktion:
e(x) = x + k (modulo 26)
e(x): Der Geheimtext (cipher text)
x: Der Klartext (plaintext)
k: Der Schlüssel, {1..26}
Sonderfälle:
- Beim berühmten Cäsar-Chiffre benutzte Julius Cäsar k = 3.
- ROT13, eine Verschlüsselung die oft im Usenet benutzt wird,
benutzt, wie der Name schon sagt, einen Wert für k von 13.
Der Vorteil daran ist, dass für die Entschlüsselung einfach
ein weiteres mal verschlüsselt werden muss (natürlich mod26).
Krypanalyse:
Die Kryptanalyse von Shift Ciphers ist, aufgrund des sehr kleinen
Schlüsselraumes, sehr einfach:
Entweder es werden einfach die 26 bzw. 256 möglichen Schlüssel
durchprobiert bis ein lesbarer Text entsteht oder es wird eine
Häufigkeitsanlyse durchgeführt.
Implementation:
Eine mögliche Implementation in C:
--[cut here]------------------
char *str_rot(char *s, int k)
{
unsigned int len = strlen(s);
unsigned char base = 0;
for(unsigned int i = 0; i < len; i++) {
if (isupper(s[i]))
base = 'A';
else if (islower(s[i]))
base = 'a';
else
{
continue;
}
s[i] -= base;
s[i] = char((s[i] + k) % 26 + base);
}
return s;
}
--[and here]------------------
Eine Implementation eines ASCII Shift-Cipher (molulo 256):
--[cut here]------------------
unsigned char *bin_rot(unsigned char *s, int k)
{
unsigned int len = strlen(s);
int y = 0;
for(unsigned int i = 0; i < len; i++) {
y = s[i] + k;
while(y < 0) {y += 256;}
while(y > 255) {y -= 256;}
s[i] = y;
}
return s;
}
--[and here]------------------
|
Copyright © 1997-2004 Oliver Gobin -
Version 2.0 vom 12.2002 -
Haftungsausschluss -
Impressum
Kommentare, Änregungen und Feedback zur Website oder zu den Texten und
Quellcodes bitte an: og@ogobin.org oder direkt
ins Gästebuch.
Diese Seite ist XHTML 1.0
und CSS konform.
This page was rendered in 0.000704 seconds