Aufgabe zum Verschlüsselungsalgorithmus

theqwe

Aktives Mitglied
Hallo zusammen,

wir haben seit Semptember "Programmieren mit Java" an der Fachhochschule und ich komme auch super gut zurecht. Jetzt haben wir aber wieder eine Aufgabe bekommen, bei der ich nicht wirklich verstehe, wie man sie angehen kann. Ich denke mal, dass ich auch allgemein noch nicht ganz den Ablauf begreife. Die Aufgabenstellung lautet:

Programmieren Sie die Klasse Verschlüsselung nach folgenden Vorgaben:
Die Klasse enthält ein Objektattribut schluessel vom Typ int und zwei Objektmethoden
verschluessele(…) und entschluessele(…), die einen String mit
dem Schlüssel schluessel verschlüsselt bzw. entschlüsselt und den verschlüsselten
bzw. entschlüsselten String zurückgibt. Gehen Sie nach dem folgenden,
sehr einfachen Verschlüsselungsalgorithmus vor
Gehen Sie davon aus, dass die zu verschlüsselnden Worte nur die Kleinbuchstaben
a – z enthalten. Jeder positiven Zahl wird nun ein Buchstaben zugeordnet
durch 0 → a, 1 → b, …, 25 → z, 26 → a, 27 → b, … . Jedem Zeichen
wird umgekehrt ein Zahlenwert zugeordnet: a → 0, b → 1, …, z → 25.
Ein Zeichen in einem Wort w wird wie folgt verschlüsselt: Auf den Zahlenwert
des Zeichens wird der Schlüsselwert schluessel und der verschluesselte Wert
des vorhergehenden Zeichens (anfangs 0) addiert. Der entsprechende Wert
wird dann in das entsprechende Zeichen umgewandelt.
Beispiel: Wir wollen das Wort „da“ verschlüsseln mit dem Schlüssel 12.
Hierzu berechnen wir den Zahlenwert 3 für das erste Zeichen d,
addieren 12 hinzu, und berechnen aus dem resultierenden Wert 15 das
Zeichen p. Nun nehmen wir den Zahlenwert für das zweite Zeichen a,
addieren den Schlüssel 12 hinzu und den Wert 15, den wir bei der Verschlüsselung
von d erhalten haben, und erhalten als Summe 27. Das
entsprechende Zeichen ist dann b.
Insgesamt erhält man also den String „pb“ für das Wort „da“.

Da es keiner verstand, hat er uns die for-Schleife für die Verschlüsselung gegeben. Bis zum vwert verstehe ich den Ansatz, aber mit dem Modulo nicht. Auch wie wir das Gesamte wieder für die Entschlüsselung verwenden können ist mir rätselhaft.

Java:
public String verschluessele(String eingabe, int schluessel) {
        
        String erg = "";
        int awert = 0;
        
        for(int i=1; eingabe.length() > i; i++) {
            int wert = eingabe.charAt(i) - 'a';
            int vwert = (wert - schluessel - awert) % 26;
            erg += (char) (vwert - 'a');
            awert = vwert;
            
        }
        return erg;
    }

Könnt ihr mir da helfen? Ich danke euch im Voraus ;)
 

temi

Top Contributor
Hast du die Lösung abgetippt? Bist du sicher, dass sie so richtig abgetippt ist?

Sie entspricht zumindest nicht der Aufgabenbeschreibung, weil der Schlüssel nicht addiert sondern subtrahiert wird.
 

temi

Top Contributor
Die Moduloperation sorgt im Übrigen dafür, dass der Bereich (der Buchstaben) von 0 - 25 ( 0 → a, 1 → b, …, 25 → z) nicht verlassen wird.

Würdest du zum "z" (= 25) als Schlüssel die 1 addieren, dann erhältst du 26. Diese 26 mod 26 ergibt dann wieder 0, was genau dem geforderten "a" entspricht.
 

theqwe

Aktives Mitglied
Hi,
danke für die Antwort. Die Lösung ist tatsächlich 1:1 abgetippt. Vielleicht hat er selbst einen Fehler eingebaut. Kann ich nicht sagen.
Das mit dem Modulo habe ich noch nicht ganz verstanden. Was ist, wenn der Schlüssel dann größer als 26 angegeben wird? Das wäre dann außerhalb des Buchstabenbereichs.
Und was genau macht das (char)?
 

temi

Top Contributor
Na, rechne doch einfach nach: "z" + 45 = 70 => 70 mod 26 = 18. Was der Buchstabe mit dem Wert 18 ist, kannst du selbst rausfinden.
 

temi

Top Contributor
Das ist meiner Ansicht nach fehlerhaft:
Java:
public String verschluessele(String eingabe, int schluessel) {
        
        String erg = "";
        int awert = 0;
        
        for(int i=1; eingabe.length() > i; i++) { // Startwert, sollte i=0 sein, sonst wird der erste Buchstabe weggelassen
            int wert = eingabe.charAt(i) - 'a'; // *
            int vwert = (wert - schluessel - awert) % 26; // schluessel und awert sollten addiert werden
            erg += (char) (vwert - 'a'); // 'a' sollte addiert werden, als Gegenoperation zu *
            awert = vwert;
            
        }
        return erg;
    }
 

theqwe

Aktives Mitglied
Java:
public String verschluessele(String eingabe, int schluessel) {
        
        String erg = "";
        int awert = 0;
        
        for(int i=0; eingabe.length() > i; i++) {
            int wert = eingabe.charAt(i) - 'a';
            int vwert = (wert - (schluessel + awert)) % 26;
            erg += (char) (vwert + 'a');
            awert = vwert;
            
        }
        return erg;
    }

Also wäre der Code jetzt genau passend zur Aufgabenstellung?
Warum wird überhaupt der Char A immer abgezogen, wenn A=0 ist und der Wert somit doch immer gleich? Wird mit der Variable awert "AlterWert" oder der WertVonA" gemeint? Wie würde die Operation jetzt rückwärts aussehen?
 

temi

Top Contributor
Also wäre der Code jetzt genau passend zur Aufgabenstellung?
Warum wird überhaupt der Char A immer abgezogen, wenn A=0 ist und der Wert somit doch immer gleich? Wird mit der Variable awert "AlterWert" oder der WertVonA" gemeint? Wie würde die Operation jetzt rückwärts aussehen?
int vwert = (wert + schluessel + awert) % 26;

'a' ist das kleine "a" in der ACSII-Tabelle und hat den Wert 97. Da die Aufgabe ja verlangt, dass a = 0 musst du bei jedem Zeichen das 'a' (= 97) abziehen.

Um wieder einen gültigen String daraus zu machen musst du entsprechend am Ende das 'a' (=97) addieren.
 

theqwe

Aktives Mitglied
So, ich melde mich nochmal. Habe Zeit gefunden den Code neu anzupassen und versucht, etwas näher zu verstehen. So wie oben beschreiben funktioniert er auch und mit dem Debugger habe ich mir die einzelnen Schritte angeguckt.
Jetzt versuche ich aber das ganze wieder zu entschlüsseln und versage nur. Ich versuche die verschlüsseln-Methode einfach "rückwärts" laufen zu lassen, aber es funktioniert nicht. Der erste Buchstabe ist richtig, aber jeder weitere immer um 1 verschoben.
Wärst du so nett und könntest zur Veranschaulichung die Lösung zeigen? Für diese Aufgabe bin ich echt zu blöd.
 

Javinner

Top Contributor
Wort abc, Index 4
chiffriere: abc
  • a(0) + 4(I) -> e(4)
  • b(1) + 4(I) + e(4) -> j(9)
  • c(2) + 4(i) + j(9) -> p(15)
Codiertes Wort : ejp

dechiffriere : ejp
  • e(4) - 4(I) -> a(0)
  • j(9) - 4(I) - e(4) -> b(1)
  • p(15) - 4(I) - j(9) -> c(2)
Klartextwort : abc

Jetzt noch für den Überlauf in beide Richtungen richtig stellen, fertig.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Jere58 Aufgabe zu Mustern Java Basics - Anfänger-Themen 1
M Interfaces Aufgabe Java Basics - Anfänger-Themen 2
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
Justin4687 Benötige Hilfe bei folgender Aufgabe Java Basics - Anfänger-Themen 2
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
R Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
Mikejr Java Berg aufgabe Java Basics - Anfänger-Themen 6
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
berserkerdq2 Habe ich die Aufgabe richtig gelöst? Java Basics - Anfänger-Themen 3
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
T Informatik Studium Aufgabe Java Basics - Anfänger-Themen 4
T Aufgabe Informatik Studium Java Basics - Anfänger-Themen 10
I matrix aufgabe Java Basics - Anfänger-Themen 22
J Brauche Hilfe bei for-each Aufgabe Java Basics - Anfänger-Themen 1
9 Aufgabe Bruttorechner Java Basics - Anfänger-Themen 14
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
J Brauche Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
J boolean aufgabe Java Basics - Anfänger-Themen 9
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
M Hilfe - Array Aufgabe Java Basics - Anfänger-Themen 8
StevenGG Aufgabe im Studium Java Basics - Anfänger-Themen 36
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
S Schulaufgabe - verstehe leider die Aufgabe nicht Java Basics - Anfänger-Themen 4
Leo0909 Ich brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 2
R Eclipse Aufgabe Java Basics - Anfänger-Themen 4
J OOP-Aufgabe Java Basics - Anfänger-Themen 15
Helix19 Informatik Grundkurs (Haus-)Aufgabe Java Basics - Anfänger-Themen 5
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
TimoN11 Java spezielle Suchprobleme - Aufgabe Java Basics - Anfänger-Themen 5
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
dieter000 Aufgabe Hilfe Java Basics - Anfänger-Themen 18
jonathanpizza Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
Q Hilfe auf Aufgabe(Matrixmultiplikation) Java Basics - Anfänger-Themen 1
jonathanpizza Hilfe bei der Aufgabe Java Basics - Anfänger-Themen 19
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Rechnungen-Aufgabe Java Basics - Anfänger-Themen 18
C Biene-Aufgabe Java Basics - Anfänger-Themen 2
K Algorithmen und Datenstrukturen Programmier Aufgabe Java Basics - Anfänger-Themen 10
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7
T Aufgabe Flussdiagramm, kann jemand checken? Java Basics - Anfänger-Themen 8
B Methoden Ausgeben Aufgabe Java Basics - Anfänger-Themen 15
M Lösung Aufgabe - Java Programmiren lernen für Dummies Java Basics - Anfänger-Themen 11
J Rekursion Klausur Aufgabe Java Basics - Anfänger-Themen 2
J Exception-Aufgabe Java Basics - Anfänger-Themen 8
I Methoden char Array Aufgabe (bitte hierbei um Hilfe) Java Basics - Anfänger-Themen 3
F Aufgabe: Abstand von einem Punkt zu einem anderen Punkt Java Basics - Anfänger-Themen 10
J Erste Schritte Aufgabe Java Basics - Anfänger-Themen 24
T Methoden BinaryTree transformieren Aufgabe Java Basics - Anfänger-Themen 36
J Brauche Hilfe bei einer aufgabe Java Basics - Anfänger-Themen 1
J Hat jemand einen Lösungsansatz für diese Aufgabe? Java Basics - Anfänger-Themen 1
S Sortieralgorithmus - Aufgabe mit Lösungsidee Java Basics - Anfänger-Themen 20
A Aufgabe: Gleitkommazahlen Java Basics - Anfänger-Themen 3
A Java-Programmierungs Aufgabe Java Basics - Anfänger-Themen 2
U Aufgabe zu Kontrollstrukturen Java Basics - Anfänger-Themen 8
G Probleme bei Aufgabe Java Basics - Anfänger-Themen 12
J Aufgabe als Feuertaufe Java Basics - Anfänger-Themen 8
S Unbedingte hilfe bei Java Aufgabe [Schleife / Zinsrechnung] Java Basics - Anfänger-Themen 14
J Hilfe bei Java Aufgabe (Restschuld berechnen) Java Basics - Anfänger-Themen 11
G Ratlosigkeit zur Aufgabe im Anhang (boolean, equals.) Java Basics - Anfänger-Themen 20
S Hilfe bei Java Aufgabe (Schleifen) Java Basics - Anfänger-Themen 25
B Probleme bei einer Aufgabe Java Basics - Anfänger-Themen 19
B BITTE!! Ich brauche dringende Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 17
H aufgabe 4 Java Basics - Anfänger-Themen 297
M Hilfe bei Projektorientierungs-Aufgabe !! Java Basics - Anfänger-Themen 3
J Java Starthilfe Verständnisfrage Aufgabe Java Basics - Anfänger-Themen 2
H java aufgabe Java Basics - Anfänger-Themen 7
E Mathematische Aufgabe: Antwort entspricht nicht der Lösung Java Basics - Anfänger-Themen 5
H was verlangt die aufgabe ? Java Basics - Anfänger-Themen 10
H java aufgabe Java Basics - Anfänger-Themen 68
H java aufgabe Java Basics - Anfänger-Themen 25
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
R Java Aufgabe (Teilbarkeit) Java Basics - Anfänger-Themen 7
H java aufgabe Java Basics - Anfänger-Themen 44
H java aufgabe Java Basics - Anfänger-Themen 7
H java string aufgabe Java Basics - Anfänger-Themen 10
H array aufgabe Java Basics - Anfänger-Themen 13
D Erste Schritte Lösen dieser Aufgabe, Hilfe! Java Basics - Anfänger-Themen 12
H aufgabe Java Basics - Anfänger-Themen 9
H lösung aufgabe Java Basics - Anfänger-Themen 12
S Hilfe für Aufgabe Java Basics - Anfänger-Themen 4
H java online aufgabe Java Basics - Anfänger-Themen 4
H Array aufgabe Java Basics - Anfänger-Themen 7
H oop aufgabe probe kalusur Java Basics - Anfänger-Themen 11
H oop aufgabe Java Basics - Anfänger-Themen 19
H JAVA AUFGABE Java Basics - Anfänger-Themen 7
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
J Problem bei Aufgabe "Geldstückelung" Java Basics - Anfänger-Themen 5
P Problem bei Java-Aufgabe Java Basics - Anfänger-Themen 12
B Verständnis Frage zu der Aufgabe Java Basics - Anfänger-Themen 30
L Klassen Geldrückgabe - Aufgabe Programmieren Java Basics - Anfänger-Themen 23

Ähnliche Java Themen

Neue Themen


Oben