Kann mir einer diesen Java Code der Vigenère-Verschlüsselung erklären?

2 Antworten

Das Grundverfahren der Vigenère-Verschlüsselung kannst du auf Wikipedia nachlesen, das wird da recht einfach und gut erklärt.

Für den Code solltest du dir eine ASCII-Tabelle heranziehen und dir ein Wort ausdenken, welches du verschlüsseln möchtest. Einen Schlüssel benötigst du ebenso. Durch konkretes Einsetzen werden solche Algorithmen schneller und einfacher verständlich.

Um jeden Buchstaben deines Wortes zu verschlüsseln, musst du über jeden Buchstaben einzeln gehen. Diesem Zweck dient die äußere Schleife. Nun wird einmal der Schlüssel ermittelt - schau dir dazu den Wert von fix an und setze einfach mal alle gegebenen Werte konkret ein. Die Modulo-Berechnung wird wohl sicherstellen, dass der berechnete Index nicht außerhalb seines Bereiches kommt. Ich zeige es einmal an einem Beispiel:

wort: HALLO
wortlaenge: 5

// errechneter Index 6
6 % 5 = 1 R 1 >> Index ist 1
buchstabe: A

// errechneter Index 2
3 % 5 = 0 R 3 >> Index ist 3
buchstabe: L

Die Prüfungen mit if-else sollen lediglich feststellen, ob das aktuell gegebene Zeichen ein Buchstabe ist, oder nicht. Hier muss erst direkt unterschieden werden zwischen Großbuchstaben (liegen mit ihrem Dezimalwert in der ASCII-Tabelle zwischen 65 und 90, beide Grenzen inklusive) und Kleinbuchstaben (97-122, Grenzen inklusive). Wenn es sich um keine Zahl handelt, wird das Zeichen nicht kodiert, sondern nur an den String (ausg) gehängt, welcher später das verschlüsselte Wort beinhalten soll.

Hier (und in der ähnlichen Zeile weiter unten):

help = (help - 65 + viginere) % 26 + 65;

wird schließlich der eigentliche Budenzauber durchgeführt. Die Addition und Subtraktion von 65 / 97 kann man ignorieren. Dies dient lediglich einer Verschiebung, um sich nur auf den Zahlenbereich 0-25 für das Alphabet fokusieren zu können.

A = 65 - 65 = 0
Z = 90 - 65 = 25

Angenommen, du hast nun ein Wort wie Test mit einem Schlüssel ABC. Dann würde die Rechnung für den ersten Buchstaben so aussehen:

// Dezimalwerte in ASCII-Tabelle
T = 84
A = 0

84 - 65 = 19 // T ist schliesslich der 20. Buchstabe im Alphabet, aber die Zaehlung hier beginnt bei 0, daher 19
19 + 0 = 19 // siehe auch Vigenère-Quadrat: T bleibt T bei A
19 % 26 = 0 R 19
19 + 65 = 84
(char) 84 = T

Um das Muster weiter zu erkennen, die Rechnung für den zweiten und dritten Buchstaben:

// Dezimalwerte in ASCII-Tabelle
e = 101
B = 1

101 - 97 = 4 // e ist der 5. Buchstabe im Alphabet, da Beginn bei 0 > 4
4 + 1 = 5 // siehe auch Vigenère-Quadrat: E-B = F
5 % 26 = 0 R 5
5 + 97 = 102
(char) 102 = f

// Dezimalwerte in ASCII-Tabelle
s = 115
C = 2

115 - 97 = 18 // s ist der 19. Buchstabe im Alphabet, da Beginn bei 0 > 18
18 + 2 = 20 // siehe auch Vigenère-Quadrat: S-C = U
20 % 26 = 0 R 20
20 + 97 = 117
(char) 117 = u

Nun könnte noch interessant sein, wieso jedesmal der Modulo zu 26 genommen wird. Dieser dient (wie auch schon bei der Berechnung von vignete) der Begrenzung zum Alphabet. Angenommen, die Summe aus Buchstabe und Schlüsselbuchstabe ist größer als 25, sorgt die Modulo-Berechnung dafür, dass der Wert wieder bei 0 beginnt.

Konkretes Beispiel: Z und D (Schlüssel)

Z = 90
D = 3

90 - 65 = 25
25 + 3 = 28 // Z-D = C
28 % 26 = 0 R 2
2 + 65 = 67
(char) 67 = C

Willst du das Programm oder die Vigenere Verschlüsselung erklärt haben?

Cäsar Verschlüsselung hast du bereits verstanden und programmiert?

Hendiplayer 
Fragesteller
 27.09.2018, 19:54

Cäsar Verschlüsselung hab ich verstanden und ich würde gerne erklätrt bekommwn wie das Programm die Vigenere Verschlüsselung anwendet, da ich sie im Grundprinzip verstanden habe

0
Schachpapa  27.09.2018, 20:14
@Hendiplayer

Dein zu verschlüsselnder Text steht in text, dein Schlüssel in schlüssel. Beide gehst du buchstabenweise durch und "addierst" den Schlüsselbuchstaben (der steht in viginere) auf den Textbuchstaben (der steht in help). Wenn du über Z hinaus kommst, fängst du im Alphabet vorne wieder an (das machen die %26 Operationen).

Das ganze wird etwas kompliziert, weil du Groß- und Kleinbuchstaben unterschiedlich behandelst. Die einen liegen zwischen 65 und 90, die anderen zwischen 97 und 122.

Das Programm ist nicht wirklich hübsch, deshalb muss man es erklären ;-)

0