Erstelle eine Implementierung der Vigenère-Chiffre. Die Vigenère-Chiffre ist eine einfache Substitutionschiffre.
Eine Chiffre ist ein Algorithmus, mit dem ein String verschlüsselt, also kodiert, wird. Der unverschlüsselte String heißt Klartext, der verschlüsselte String heißt Geheimtext. Das Umwandeln von Klartext in Geheimtext nennt man Kodieren, das Umgekehrte Dekodieren.
Bei einer Substitutionschiffre wird jeder Buchstabe des Klartexts durch einen Buchstaben des Geheimtexts ersetzt, der mithilfe eines Schlüssels berechnet wird. (Beachte: Der Ersatzbuchstabe kann derselbe sein wie der ursprüngliche Buchstabe.)
In dieser Chiffre ist der Schlüssel eine Reihe von Kleinbuchstaben, wie zum Beispiel "abcd".
Jeder Buchstabe des Klartexts wird um eine Strecke verschoben oder rotiert, die auf einem entsprechenden Buchstaben im Schlüssel beruht.
Ein "a" im Schlüssel bedeutet eine Verschiebung von 0 (also keine Verschiebung).
Ein "b" im Schlüssel bedeutet eine Verschiebung von 1.
Ein "c" im Schlüssel bedeutet eine Verschiebung von 2, und so weiter.
Der erste Buchstabe des Klartexts verwendet den ersten Buchstaben des Schlüssels, der zweite Buchstabe des Klartexts den zweiten Buchstaben des Schlüssels, und so weiter. Wenn dir die Buchstaben im Schlüssel ausgehen, bevor die Buchstaben im Klartext ausgehen, beginnst du wieder am Anfang des Schlüssels.
Wenn der Schlüssel nur einen Buchstaben enthält, wie "dddddd", dann werden alle Buchstaben des Klartexts um denselben Betrag verschoben (in diesem Beispiel um drei). Damit entspricht er einer Rotationschiffre oder Verschiebechiffre (manchmal Caesar-Chiffre genannt).
Zum Beispiel würde aus dem Klartext "iamapandabear" der Geheimtext "ldpdsdqgdehdu".
Wenn der Schlüssel nur den Buchstaben "a" enthält (einmal oder mehrfach), ist die Verschiebung null und der Geheimtext ist derselbe wie der Klartext.
Meist ist der Schlüssel aber komplizierter!
Wenn der Schlüssel "abcd" ist, dann werden die Buchstaben des Klartexts um 0, 1, 2 und 3 verschoben.
Wenn der Klartext "hello" ist, brauchen wir 5 Verschiebungen, also würde der Schlüssel umlaufen und die Verschiebungen 0, 1, 2, 3 und 0 ergeben.
Wenden wir diese Verschiebungen auf die Buchstaben von "hello" an, erhalten wir "hfnoo".
Wenn kein Schlüssel angegeben wird, erzeuge einen Schlüssel, der aus mindestens 100 zufälligen Kleinbuchstaben des lateinischen Alphabets besteht.
Melde dich bei Exercism an, um PHP mit 11 Konzepte122 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.