Cäsar-Verschlüsselung

Status
Nicht offen für weitere Antworten.

Kar

Mitglied
Guten Abend,
ich hatte die Hausaufgabe, die Cäsar-Verschlüsselung in Java zu implementieren.
Dies habe ich auch (hoffentlich) geschafft. Also ich habe ein paar Teststrings ver- und entschlüsselt und verglichen.

Hier ist mal der Quellcode:
Java:
import java.util.Scanner;

public class CaesarCrypt {

    private char alphabet[];
   
    public CaesarCrypt() {
        initAlphabet();
    }
   
    public String encode(String text) {
        StringBuilder sb = new StringBuilder();
        String newText = text.trim();
        char letter[] = newText.toLowerCase().toCharArray();
        int current = 0;

        for(int k = 0; k < letter.length; k++) {
            for(int i = 0; i < alphabet.length; i++) {
                if(letter[current] == alphabet[i]) {
                    if((i + 3) >= alphabet.length)
                        sb.append(alphabet[(int) Math.abs((alphabet.length - i)-3)]);
                    else
                        sb.append(alphabet[i+3]);
                }
                if(i == alphabet.length - 1)
                    current++;
            }
        }
        return sb.toString();
    }
   
    public String decode(String text) {
        StringBuilder sb = new StringBuilder();
        String newText = text.trim();
        char letter[] = newText.toLowerCase().toCharArray();
        int current = 0;

        for(int k = 0; k < letter.length; k++) {
            for(int i = 0; i < alphabet.length; i++) {
                if(letter[current] == alphabet[i]) {
                    if((i - 3) < 0)
                        sb.append(alphabet[(alphabet.length + i) - 3]);
                    else
                        sb.append(alphabet[i-3]);
                }
                if(i == alphabet.length - 1)
                    current++;
            }
        }
        return sb.toString();
    }
   
    public void initAlphabet() {
        alphabet = new char[26];
        char c = 'a';
        for(int i = 0; i < alphabet.length; i++) {
            alphabet[i] = c;
            c++;
        }
    }
   
    public static void main(String[] args) {
        int in;
        Scanner s = new Scanner(System.in);
        CaesarCrypt cc = new CaesarCrypt();
       
        System.out.println("###########################");
        System.out.println("#                         #");
        System.out.println("# Caesar-Verschluesselung #");
        System.out.println("#                         #");
        System.out.println("###########################");
        System.out.println("#                         #");
        System.out.println("#                         #");
        System.out.println("# 1 - Verschluesseln      #");
        System.out.println("# 2 - Entschluesseln      #");
        System.out.println("#                         #");
        System.out.println("#                         #");
        System.out.println("###########################");
       
        in = s.nextInt();
       
        if(in == 1) {
            System.out.println();
            System.out.print("Text: ");
            System.out.println("Verschluesselt: " + cc.encode(s.next()));
        } else if(in == 2) {
            System.out.println();
            System.out.print("Text: ");
            System.out.println("Entschluesselt: " + cc.decode(s.next()));
        }
    }
}

Ich finde irgendwie, dass ich das unsauber gelöst habe. Vorallem die for-Schleifen-Verschachtelung finde ich sehr unübersichtlich.
Nun zu meiner Frage:
Kann man es übersichtlicher, "sauberer" lösen?
Und zweitrangig: Ist mein Programmierstil so in Ordnung?

Ich bin für jede Antwort sehr dankbar.
 
S

SlaterB

Gast
die innere for-Schleife ist unnötig,

besonders interessant versteckt ist dabei
> if(i == alphabet.length - 1) current++;
das passiert genau einmal pro innere Schleife über dem alphabet und zwar beim letzten Zeichen,
genausogut könntest du also ganz einfach
current++;
hinter der inneren Schleife schreibe, hätte den gleichen Effekt,

current wird aber gar nicht benötigt, das k der äußeren for-Schleife hat doch immer den gleichen Wert,
> for(int k = 0; k < letter.length; k++) {
ist eine Schleife über alle Buchstaben im letter-Array, dann ist doch letter[k] der aktuelle Buchstabe, wozu noch current?

------

und wie gesagt die innere Schleife, die kann weg, zumindest aus dem Hauptcode,
du brauchst die Position von letter[k] im alphabet-Array, ok,

egal wie man das anstellt, auf jeden Fall besser in einer Submethode, also
Java:
int index = findIndex(letter[k]);
if .. {
add alpabet[index +3]
} else {
add alpabet[index Math.abs usw]
}
dann siehts gleich aufgeräumter aus,
wie auch immer findIndex() funktioniert, das muss nur einmal programmiert werden und belastet encode/ decode nicht so sehr wenn es woanders steht

wie findIndex vorgeht ist variabel, statt ner Schleife könnte man die Position auch ausrechnen,
da 'a' den ASCII-Code 97 hat, 'b' 99 usw, musst du für ein Zeichen aus letter nur minus 'a' rechnen,
dann passt es,
Java:
char c = 'f';
int position = c - 'a'; // position = 5 oder so
Probleme bekommst du, wenn jemand ß oder Umlaute eintippt, dann lieber noch prüfen, ob die errechnete Position noch in den Grenzen des Arrays liegt,
durchaus also etwas kompliziert, musst du auch nicht machen

---------

ganz wichtig wäre noch, die 3, den wichtigen Verschiebungsschlüssel, in eine Variable auszulagern,
wenn du statt 3 Buchstaben lieber um 4 verschieben willst, müßtest du derzeit 6 verschiedene Codestellen ändern,
jede vergessene Stelle wäre fatal,
wenn du aber dagegen
private int key = 3;
zu
private int key = 4;
änderst, ist das leicht und praktisch nicht falsch zu machen
 
Zuletzt bearbeitet von einem Moderator:
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Cäsar Verschlüsselung Java Basics - Anfänger-Themen 8
A Methoden Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 13
Ä Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 5
Z Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
H Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
R Frage zu Cäsar - Verschlüsselung! Java Basics - Anfänger-Themen 10
J Cäsar Verschlüsselung Java Basics - Anfänger-Themen 12
A Cäsar-Veschlüsselung Java Basics - Anfänger-Themen 33
H Cäsar chiffrierung ohne if-Anweisung Java Basics - Anfänger-Themen 5
F Cäsar-Code Java Basics - Anfänger-Themen 9
G Ist die Cäsar Verschlüsseling implementiert ? Java Basics - Anfänger-Themen 6
Camoflasche RSA Verschlüsselung Java Basics - Anfänger-Themen 0
J RSA Verschlüsselung Testen / byte[] in Objekt umwandeln Java Basics - Anfänger-Themen 1
M Verschlüsselung mit replace() Java Basics - Anfänger-Themen 35
P Cäsear verschlüsselung irgendwas passt noch nicht Java Basics - Anfänger-Themen 2
E Einfache Java Verschlüsselung Java Basics - Anfänger-Themen 4
N Erste Schritte JFrame Caesar-Verschlüsselung Java Basics - Anfänger-Themen 23
Y Caesar Verschlüsselung Fehler Java Basics - Anfänger-Themen 4
N Caesar Verschlüsselung Java Basics - Anfänger-Themen 2
L Interpreter-Fehler RSA Verschlüsselung Fehler Java Basics - Anfänger-Themen 2
M Erste Schritte Verschlüsselung von text Java Basics - Anfänger-Themen 21
M Erste Schritte Verschlüsselung / Login-Sicherheit Java Basics - Anfänger-Themen 8
D Eine einfache Verschlüsselung schreiben Java Basics - Anfänger-Themen 3
A Vigenere Verschlüsselung Java Basics - Anfänger-Themen 2
B RSA Verschlüsselung für Aktivierunscode Java Basics - Anfänger-Themen 7
T Array Verschlüsselung Java Basics - Anfänger-Themen 5
V Permutation, Verschlüsselung Java Basics - Anfänger-Themen 19
S Caesar Verschlüsselung Start Hilfe Java Basics - Anfänger-Themen 4
K Symmetrische Verschlüsselung von TextArea Java Basics - Anfänger-Themen 7
U Problem mit Verschlüsselung Java Basics - Anfänger-Themen 2
C Frage zu RSA-Verschlüsselung Java Basics - Anfänger-Themen 3
Y Applet: Verschlüsselung Java Basics - Anfänger-Themen 3
H Caesar-Verschlüsselung - Was stimmt nicht? Java Basics - Anfänger-Themen 6
V Ceasar Verschlüsselung Java Basics - Anfänger-Themen 9
D Verschlüsselung mit Java Java Basics - Anfänger-Themen 8
F Problem: Verschlüsselung von String in Array Fehler Java Basics - Anfänger-Themen 2
C Verschlüsselung Java Basics - Anfänger-Themen 8
I Rc4 Verschlüsselung in BlueJ Java Basics - Anfänger-Themen 18
D Verschlüsselung Java Basics - Anfänger-Themen 4
C Compiler-Fehler Verschlüsselung Java Basics - Anfänger-Themen 2
B byte-weise Verschlüsselung Java Basics - Anfänger-Themen 6
S Caesar-Verschlüsselung Problem/Frage Java Basics - Anfänger-Themen 4
D Java Password verschlüsselung Java Basics - Anfänger-Themen 6
P RSA Verschlüsselung kleines Problem Java Basics - Anfänger-Themen 5
R Verschlüsselung von String Java Basics - Anfänger-Themen 4
G Verschlüsselung und Entschlüsselung von Texten Java Basics - Anfänger-Themen 7
D Java Verschlüsselung Java Basics - Anfänger-Themen 8
O Verschlüsselung mit Cipher & Key Java Basics - Anfänger-Themen 9
A Vigenere Verschlüsselung Java Basics - Anfänger-Themen 2
S Hill Verschlüsselung Java Basics - Anfänger-Themen 10
A Einfache java Verschlüsselung HILFE Java Basics - Anfänger-Themen 3
W Xor-Verschlüsselung Java Basics - Anfänger-Themen 15
Y verschlüsselung Java Basics - Anfänger-Themen 10
T Frage zur Verschlüsselung (RSA) Java Basics - Anfänger-Themen 6
A Java Verschlüsselung/Cipher Java Basics - Anfänger-Themen 12
S Verschlüsselung Key Splitting Java Basics - Anfänger-Themen 2
B Again, Verschlüsselung Java Basics - Anfänger-Themen 3
M Caeser Verschlüsselung ganz einfach(nicht für mich) Java Basics - Anfänger-Themen 6
L Frage zur Verschlüsselung in java Java Basics - Anfänger-Themen 3
D Verschlüsselung Java Basics - Anfänger-Themen 4
A verschlüsselung Java Basics - Anfänger-Themen 7
G Vergleich bei MD5-Verschlüsselung Java Basics - Anfänger-Themen 3
zilti md5-Verschlüsselung? Java Basics - Anfänger-Themen 7
L Caesar-Verschlüsselung programmieren Java Basics - Anfänger-Themen 12
Lazybone Vigenere Verschlüsselung funktioniert nicht richtig Java Basics - Anfänger-Themen 8
S XOR-Verschlüsselung Java Basics - Anfänger-Themen 5
U "Einfache Verschlüsselung" Java Basics - Anfänger-Themen 17
K Verschlüsselung Java Basics - Anfänger-Themen 8
E Verschlüsselung mithilfe von Array Java Basics - Anfänger-Themen 2
S SHA? Hashcodes, Blowfish Verschlüsselung Java Basics - Anfänger-Themen 7
L Java und PGP Verschlüsselung, wie...??? Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben