Vigenere- Verschlüsselung

Kampfzwereg

Bekanntes Mitglied
Hallo,

ich habe mich in den letzten Tagen mit der Vigenere Verschlüsselung beschäftigt. Dazu habe ich mir ein paar Besipielcodes im Internet angegeguck und einen ausgewählt.Zu ein paar stellen habe ich noch ein paar Fragen:

Das ist der besagt Code
Java:
public static String vigenereVerschluesselung(String pText, String pCode) 
      {        
        StringBuilder pStringBuilder = new StringBuilder();
        for(int i = 0, j = 0; i < pText.length(); i++)
        {
            char schluessel = pCode.toUpperCase().charAt(j%pCode.length());
            char a = pText.toUpperCase().charAt(i);
            char b = ' ';
            if(a >= 65 && a <= 90) 
            {
                b = (char)(a - 65 + schluessel);
                if((int)b > 90)
                {
                    b -= 26;
                }
                if(pText.charAt(i) >= 97)
                {
                    b += 32;
                }
                pStringBuilder.append(b);
                j++;
            }
            else
            {
                pStringBuilder.append(a);
            }
            
        }
        return pStringBuilder.toString();
    }

1: Was hat es mit der For-Schleife auf sich. Wieso werden da zwei Variablen angegeben ?
2:Was genau macht das "toUpperCase()" und das "%"...

Java:
char schluessel = pCode.toUpperCase().charAt(j%pCode.length());
char a = pText.toUpperCase().charAt(i);
char b = ' ';

... und wieso kann in der darauffolgenden Zeile ein Char mit einer Zahl verglichen werden?

3: Was bedeutet das ?

Java:
b -= 26;




Für Antworten bedanke ich mich schonmal.

LG
 
T

tuxedo

Gast
3: Was bedeutet das ?

Java:
b -= 26;

Kurzform für

Java:
b = b - 26;

Gibt's auch für Addition, Multiplikation und Division.

1: Was hat es mit der For-Schleife auf sich. Wieso werden da zwei Variablen angegeben ?

Offenbar werden zwei Variablen für die abarbeitung des Algorithmus gebraucht...

2:Was genau macht das "toUpperCase()" und das "%"...

toUpperCase() ---> :rtfm: ... Und wer englisch kann, aber kein JavaDoc lesen will könnte mutmaßen, dass der String damit in Großbuchstaben gewandelt wird.

% --> Google mal nach "Modulo".
 
Zuletzt bearbeitet von einem Moderator:

faetzminator

Gesperrter Benutzer
1. Weil irgendjemand aus irgendeinem Grund Freude an dem [c]j[/c] hat...
2a. Schau in die Javadoc: [japi]String[/japi]. Abgesehen davon verrät die Methode bereits, dass sie den String in Upper Case - also Grossbuchstaben - zurückgibt.
2b. Das ist Modulo. Gibt den Rest einer Bruchrechnung zurück. Also 10 / 3 --> 3 und 10 % 3 --> 1 (weil 3*3+1=10)
3. [c]b -= 26[/c] ist die Kurzform für [c]b = b - 26[/c]
 

jgh

Top Contributor
von hinten nach vorne^^

Java:
b -= 26;
//ist die Kurzschreibweise von 
b= b-26;

Code:
toUpperCase()
ändert den Buchstaben, resp. den char in einen Großbuchstaben...sollte eigentlich aus dem Namen der Methode zumindest erahnbar sein, ansonsten API lesen:
Converts all of the characters in this String to upper case using the rules of the default locale. This method is equivalent to toUpperCase(Locale.getDefault()).

Code:
%
ist ein Modulo Operator der dir den ganzzahligen Reste einer Division ausgibt.

Jo, warum du 2 Variablen brauchst...da kannst du mal überlegen ;)

[edit]Dritter...immerhin noch Bronze ;) aber schon der zweite ist der erste Verlierer :D[/edit]
 
T

tuxedo

Gast
Bin manchmal zu schnell was das absenden einer Antwort betrifft. Dann lese ich den Beitrag nochmal und dann fällt mir noch das eine oder andere auf das ich ergänzen könnte :D
 

Kampfzwereg

Bekanntes Mitglied
Danke erstmal für die zahlreichen Antworten.

@ all: Es tut mir ja leid, dass ich bei "toUpperCase" nicht sofort auf die Lösung komme und bei , für euch selbstverständlichen Sachen, nicht weiß wies funktioniert, aber gewissen kommentare sind manchmal meiner meinung nach unnötig. Und auch solche sachen wie "Jo, warum du 2 Variablen brauchst...da kannst du mal überlegen " nerven find ich nen bisschen .Als hätt ich nich schon drüber nachgedacht, desswegen frag ich doch, weil ich mir trotzdem keinen Reim draus machen kann. Wollt ich nur mal in den Raum stellen.

Naja wie gesagt, danke für die Antworten. Eine Frage ist vllt in den Hintergrund gerückt, undzwar, wieso ich in Zeile 9 einen char mit einer Zahl vergleichen kann. Was wenn der char 'a' ist?
 

Ark

Top Contributor
Was wenn der char 'a' ist?
Code:
'a'
ist nur eine andere Schreibweise im Java-Quelltext für die Zahl 97. Du hättest an dieser Stelle genausogut auch
Code:
(char)97
oder
Code:
(char)0x61
schreiben können, das hätte genau nichts geändert. Das
Code:
(char)
ist in den Beispielen gerade auch nur nötig, um korrekt zu bleiben: fast immer kann man sogar das weglassen.

Das Zeichen a hat im Unicode die Nummer 97, daher dieser Wert.

Ark
 

Ark

Top Contributor
ich dachte a wär irgendeine Variable, der ich in diesem fall ne Zahl oder was andere zuweise ?
Verzeihung, dann habe ich deine Frage wohl nicht richtig verstanden (und verstehe sie noch immer nicht). Grund für die Verwirrung:
Code:
a
(ohne ' drumrum) ist was anderes als
Code:
'a'
(mit ' drumrum). Ersteres ist ein Bezeichner (von z.B. einer Variablen), Letzteres ist ein char-Literal für eine Konstante vom Typ char und mit dem Ganzzahlwert 97.

Ark
 

Kampfzwereg

Bekanntes Mitglied
super jetzt raff ichs ...dann müsste doch aber das hier

Java:
char a = pText.toUpperCase().charAt(i);
if(a >= 65 && a <= 90)

nur funktionieren, wenn eine Zahl a zugewiesen wurde oder ? .... weil hier ja nich die Konstanten 97 gemeint ist... dasis wmeine frage ;-]
 
V

vanny

Gast
... dasis wmeine frage ;-]
öhm hust ^^

Wie du schon erfahren hast ist ein char auch ein entsprechender Ganzzahlwert.
das a in deinem code ist die Bezeichnung der Variable(also ihr Name) und a ist halt vom Typ-char.
der Wert hingegen ist dann jeweils
Code:
pText.toUpperCase().charAt(i)
. und somit auch irgendein Ganzzahlwert.
 

Ark

Top Contributor
Mal dein Code von eben, leicht umgeschrieben, macht genau das gleiche:
Java:
char a = pText.toUpperCase().charAt(i);
if(a >= 'A' && a <= 'Z')

So. Und a ist in deinem Fall eine Variable vom Typ char. Ein char wird durch 16 Bit kodiert und repräsentiert eine Ganzzahl mit einem Wert zwischen 0 und 65535 (inklusive). Wenn mit chars rumhantiert wird, dann deutet man sie für gewöhnlich als Unicode-Zeichen mit der jeweiligen Nummer. Man kann aber mit chars auch ganz normal rechnen, schließlich sind das immer nur Ganzzahlen. Es sind Zahlen, die für gewöhnlich als Unicode-Zeichen gedeutet werden.

Wenn nun z.B. der Nutzer die Zeichenkette "23" eingibt, dann ergibt
Code:
charAt(0)
, also
Code:
"23".charAt(0)
, den Wert der Zahl 50. Warum? Weil dem Zeichen '2', das wir im deutschsprachigen Raum "Zwei" oder "Ziffer Zwei" nennen, die Unicode-Nummer 50 zugeordnet ist.

Ark
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Vigenere Chiffre Programmierung Allgemeine Java-Themen 5
C Vigenere und Caesar in verschiedenen Alphabeten Allgemeine Java-Themen 1
T Programm Vigenere Verfahren Allgemeine Java-Themen 14
M pfx-Zertifikat in Tomcat für SSL-Verschlüsselung nutzen Allgemeine Java-Themen 14
X Verschlüsselung Allgemeine Java-Themen 18
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
R Verschlüsselung falsch Allgemeine Java-Themen 3
R Verschlüsselung funktioniert nicht Allgemeine Java-Themen 5
J Passwort Verschlüsselung hash Allgemeine Java-Themen 2
D AES Verschlüsselung / Wirklich AES 128-Bit? Allgemeine Java-Themen 4
I Best Practice Verschlüsselung mit SALT Allgemeine Java-Themen 4
A Mehrfache XOR Verschlüsselung Allgemeine Java-Themen 11
Thallius Moderne sichere synchrone Verschlüsselung mit Java? Allgemeine Java-Themen 3
Ananaskirsche Verschlüsselung mit AES Allgemeine Java-Themen 4
E Verschlüsselung Allgemeine Java-Themen 4
F Schlüsselworte RSA Verschlüsselung implementieren Allgemeine Java-Themen 5
S Key (für AES-Verschlüsselung) aus String Allgemeine Java-Themen 4
M Serialisierung & Verschlüsselung Allgemeine Java-Themen 2
K Problem mit Salted - Verschlüsselung Allgemeine Java-Themen 4
Z Java E-Mail Client mit End-to-End-Verschlüsselung Allgemeine Java-Themen 4
J Verschlüsselung von Text? Allgemeine Java-Themen 2
M Verschlüsselung von Text und Files durch RSA (Encoding Problem) Allgemeine Java-Themen 7
T AES-Verschlüsselung mit eigenem 256 Bit Schlüssel Allgemeine Java-Themen 12
DStrohma Verschlüsselung: SALT aus Passwort generieren? Allgemeine Java-Themen 3
G AES Verschlüsselung nur bis 63 Zeichen Länge Allgemeine Java-Themen 2
M Verschlüsselung mit Cipher Allgemeine Java-Themen 5
B XOR Verschlüsselung Allgemeine Java-Themen 7
S Framework für symetrische und asymetrische Verschlüsselung Allgemeine Java-Themen 3
lumo Verschlüsselung Allgemeine Java-Themen 2
H Verschlüsselung mit Blowfish Allgemeine Java-Themen 14
C Interpreter-Fehler AES verschlüsselung mit MD5 key Allgemeine Java-Themen 6
S AES Verschlüsselung - File Headers korrupt Allgemeine Java-Themen 10
A Datei, UTF-8, NTRU-Verschlüsselung Allgemeine Java-Themen 3
B "Verschlüsselung" mit Passwort (XOR bzw. Modulo) Allgemeine Java-Themen 7
B String Verschlüsselung Allgemeine Java-Themen 6
M Verschlüsselung anwenden Allgemeine Java-Themen 6
J Verschlüsselung Allgemeine Java-Themen 22
T MD5 Verschlüsselung Nullen fehlen? Allgemeine Java-Themen 2
L [Exception] RSA Verschlüsselung. Allgemeine Java-Themen 16
C javamail signatur und verschlüsselung Allgemeine Java-Themen 2
R 128 Bit Verschlüsselung/Entschlüsselung in Java? Allgemeine Java-Themen 6
F RSA-Verschlüsselung Allgemeine Java-Themen 4
S Verschlüsselung in Java Allgemeine Java-Themen 2
G Interessant! Verschlüsselung in Java, Charset in der JVM? Allgemeine Java-Themen 14
D Eigener Key bei AES Verschlüsselung Allgemeine Java-Themen 4
T Verschlüsselung von Dateien Allgemeine Java-Themen 8
S Verschlüsselung - IllegalBlockSizeException Allgemeine Java-Themen 3
G Problem mit RSA Verschlüsselung bei .net und Java Allgemeine Java-Themen 1
D Caesar und Vigenère Verschlüsselung Allgemeine Java-Themen 2
alexpetri Verschlüsselung Allgemeine Java-Themen 13
@ [Sicherheit] Speicherung von Keys für Verschlüsselung Allgemeine Java-Themen 4
P Verschlüsselung in PHP -> Entschlüsselung in Java Allgemeine Java-Themen 2
Lazybone Caeser Verschlüsselung Allgemeine Java-Themen 6
S Verschlüsselung mit Cipher Allgemeine Java-Themen 8
S Verschlüsselung Allgemeine Java-Themen 15
J Problem mit Dateien/XOR-Verschlüsselung Allgemeine Java-Themen 5
G RSA-Verschlüsselung Allgemeine Java-Themen 1
P HMACMD5- Verschlüsselung entschlüsseln Allgemeine Java-Themen 2
I Verschlüsselung mit Pwd. - User soll Algorithmus wählen Allgemeine Java-Themen 4
J Probleme bei XOR verschlüsselung ! Allgemeine Java-Themen 5
G Verschlüsselung in Java Allgemeine Java-Themen 9
M RSA Verschlüsselung Allgemeine Java-Themen 7
J Verschlüsselung von Daten Allgemeine Java-Themen 21

Ähnliche Java Themen

Neue Themen


Oben