Mit Hilfe der folgenden PHP- und JavaScript-Schnipsel kann eine beliebige Buchstabenfolge mittels der Caesar-Verschiebung ver- und entschlüsselt werden. Es handelt sich dabei um ein einfaches, symmetrisches Verschlüsselungsverfahren. Es gilt als äusserst unsicher und sollte daher auch nur für Anschauungszwecke verwendet werden. Wer Interesse hat, kann den nachfolgenden Quelltext gerne unter Berücksichtigung der GNU AGPL weiterverwenden und/oder erweitern.
/**
* ACHTUNG: Die Caesar-Verschlüsselung ist nicht sicher!
*
* ---
*
* Bei der Caesar-Verschlüsselung handelt es sich um ein einfaches,
* symmetrisches Verschlüsselungsverfahren.
*
* Die Verschlüsselung "E" eines Klartextbuchstabens "x" mit einer
* Verschiebung um "n" Zeichen und einem Alphabet aus 26 Zeichen ist
* wie folgt definiert:
*
* E(x) = (x + n) mod 26
*
* Die Entschlüsselung "D" hingegen:
*
* D(x) = (x - n) mod 26
*
* Beispiel (Verschlüsselung):
*
* caesar_cipher("TEST", 5, true)
*
* Rückgabe:
*
* string(4) "YJXY"
*
* Beispiel:
*
* caesar_cipher("YJXY", 5, false)
*
* Rückgabe:
*
* string(4) "TEST"
*
* Im Fehlerfall gibt die Funktion "false" zurück.
*
* @author Pascal Hollenstein <webmaster@zockerade.com>
* @version 1.0
* @license GNU AGPL
*
* @param string $string
* @param integer $displacement
* @param boolean $mode
* @return mixed
*/
function caesar_cipher(string, displacement, mode) {
var returnArray = [], displacement = parseInt(displacement);
if (typeof(string) === "string" && displacement > 0 && displacement < 26 && typeof(mode) === "boolean") {
var stringParts = string.toUpperCase().split(""), alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".split(""), asNumbers = {};
for (key in alphabet) {
asNumbers[alphabet[key]] = parseInt(key);
}
for (var i = 0; i < stringParts.length; i++) {
if (alphabet.indexOf(stringParts[i]) === -1) {
return false;
}
returnArray.push(alphabet[(asNumbers[stringParts[i]] + (mode === true ? 1 : -1) * displacement + 26) % 26]);
}
}
return returnArray.length === 0 ? false: returnArray.join("");
}
/**
* ACHTUNG: Die Caesar-Verschlüsselung ist nicht sicher!
*
* ---
*
* Bei der Caesar-Verschlüsselung handelt es sich um ein einfaches,
* symmetrisches Verschlüsselungsverfahren.
*
* Die Verschlüsselung "E" eines Klartextbuchstabens "x" mit einer
* Verschiebung um "n" Zeichen und einem Alphabet aus 26 Zeichen ist
* wie folgt definiert:
*
* E(x) = (x + n) mod 26
*
* Die Entschlüsselung "D" hingegen:
*
* D(x) = (x - n) mod 26
*
* Beispiel (Verschlüsselung):
*
* caesar_cipher("TEST", 5, true)
*
* Rückgabe:
*
* string(4) "YJXY"
*
* Beispiel (Entschlüsselung):
*
* caesar_cipher("YJXY", 5, false)
*
* Rückgabe:
*
* string(4) "TEST"
*
* Im Fehlerfall gibt die Funktion "false" zurück.
*
* @author Pascal Hollenstein <webmaster@zockerade.com>
* @version 1.0
* @license GNU AGPL
*
* @param string $string
* @param integer $displacement
* @param boolean $mode
* @return mixed
*/
function caesar_cipher($string, $displacement, $mode) {
$alphabet = range("A", "Z");
if (is_string($string) === true && is_bool($mode) === true && max(min($displacement, 25), 1) === $displacement) {
$string = strtoupper($string);
foreach (str_split($string) as $value) {
$alphabet_in_numbers = array_flip($alphabet);
if (in_array($value, $alphabet) === false) {
return false;
}
$return[] = $alphabet[fmod(26 + $alphabet_in_numbers[$value] + $displacement * ($mode ? 1 : -1), 26)];
}
}
return isset($return) ? join("", $return) : false;
}