Ceasar Verschlüsselung

Veraenderer

Mitglied
Hi,
ich habe ein Problem:
Ich habe ein Program programmiert welches einen eingegeben Text verschlüsseln soll. Allerdings kommt es sobald ich den Text mit der Caesar Methode verschlüssle zu folgenden Fehler:
Die Buchstaben werden zwar verschlüsselt (und es kommt zu keiner Fehlermeldung), aber die Buchstaben werden falsch verschlüsselt.
Also eigentlich soll aus einem a ein f werden aber es wird ein d. Das ganze wird noch mysteriöser dadurch das alle Buchstaben entweder zu a,b,c,d oder e verschlüsselt werden. Also werden z.B. alle a, g, j,1 usw. zu d's.

Da der Fehler schwierig zu erklären ist habe ich das Program angehängt.

Ich vermute der Fehler liegt in der Schleife mit den vielen if's.

Ich würde mich auch darüber freuen, wenn ihr mir Tipps geben könntet wie ich Teile die funktionieren eleganter lösen könnte.

Java:
public class Verschluessel
{

    String input;
    public Verschluessel(String input1)
    {
        input=input1;
        
    }
    //Dreht den Text um
    public void reverse () {
        input=new StringBuffer(input).reverse().toString();
    }
    //Caesar Verfahren
    public void caesar () {
        int x=5;
        String alphabetl="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        char [] alphabet=new char[alphabetl.length()];
        alphabet=alphabetl.toCharArray();
        char [] theText = new char [input.length ()];
        theText=input.toCharArray();
        char [] newalphabet=new char[alphabetl.length()];
        System.out.println (alphabetl.length ());
        for (int i=0; i<alphabetl.length(); i++) {
            if ((i+x)<alphabetl.length()) {
            newalphabet [i]=alphabet[i+x];
        }
        else {
            newalphabet [i]=alphabet[i+x-alphabetl.length()];
        }
    
    } 
    System.out.println (theText);
        for (int i=0; i<input.length();i++) {
            if (theText[i]=='a') {
            theText[i]=newalphabet[0];
                        System.out.println (newalphabet[0]);
            }
            if (theText[i]=='b') {
            theText[i]=newalphabet[1];
                        System.out.println (newalphabet[1]);
            }
            
            if (theText[i]=='c') {
            theText[i]=newalphabet[2];
                        System.out.println (newalphabet[2]);
            }
            if (theText[i]=='d') {
            theText[i]=newalphabet[3];
                        System.out.println (newalphabet[3]);
            }
            if (theText[i]=='e') {
            theText[i]=newalphabet[4];
                        System.out.println (newalphabet[4]);
            }
            if (theText[i]=='f') {
            theText[i]=newalphabet[5];
                        System.out.println (newalphabet[5]);
            }
             
            if (theText[i]=='g') {
            theText[i]=newalphabet[6];
                        System.out.println (newalphabet[6]);
            }
            if (theText[i]=='h') {
            theText[i]=newalphabet[7];
            }
            if (theText[i]=='i') {
            theText[i]=newalphabet[8];
            }
            if (theText[i]=='j') {
            theText[i]=newalphabet[9];
            }
            if (theText[i]=='k') {
            theText[i]=newalphabet[10];
            }
            if (theText[i]=='m') {
            theText[i]=newalphabet[11];
            }
            if (theText[i]=='n') {
            theText[i]=newalphabet[12];
            }
            if (theText[i]=='l') {
            theText[i]=newalphabet[13];
            }
            if (theText[i]=='o') {
            theText[i]=newalphabet[14];
            }
            if (theText[i]=='p') {
            theText[i]=newalphabet[15];
            }
            if (theText[i]=='q') {
            theText[i]=newalphabet[16];
            }
            if (theText[i]=='r') {
            theText[i]=newalphabet[17];
            }
            if (theText[i]=='s') {
            theText[i]=newalphabet[18];
            }
            if (theText[i]=='t') {
            theText[i]=newalphabet[19];
            }
            if (theText[i]=='u') {
            theText[i]=newalphabet[20];
            }
            if (theText[i]=='v') {
            theText[i]=newalphabet[21];
            }
            if (theText[i]=='w') {
            theText[i]=newalphabet[22];
            }
            if (theText[i]=='x') {
            theText[i]=newalphabet[23];
            }
            if (theText[i]=='y') {
            theText[i]=newalphabet[24];
            }
            if (theText[i]=='z') {
            theText[i]=newalphabet[25];
            }
            if (theText[i]=='A') {
            theText[i]=newalphabet[26];
            }if (theText[i]=='B') {
            theText[i]=newalphabet[27];
            }if (theText[i]=='C') {
            theText[i]=newalphabet[28];
            }if (theText[i]=='D') {
            theText[i]=newalphabet[29];
            }if (theText[i]=='E') {
            theText[i]=newalphabet[30];
            }if (theText[i]=='F') {
            theText[i]=newalphabet[31];
            }if (theText[i]=='G') {
            theText[i]=newalphabet[32];
            }if (theText[i]=='H') {
            theText[i]=newalphabet[33];
            }if (theText[i]=='I') {
            theText[i]=newalphabet[34];
            }if (theText[i]=='J') {
            theText[i]=newalphabet[35];
            }if (theText[i]=='K') {
            theText[i]=newalphabet[36];
            }if (theText[i]=='L') {
            theText[i]=newalphabet[37];
            }if (theText[i]=='M') {
            theText[i]=newalphabet[38];
            }if (theText[i]=='N') {
            theText[i]=newalphabet[39];
            }if (theText[i]=='O') {
            theText[i]=newalphabet[40];
            }if (theText[i]=='P') {
            theText[i]=newalphabet[41];
            }if (theText[i]=='Q') {
            theText[i]=newalphabet[42];
            }if (theText[i]=='R') {
            theText[i]=newalphabet[43];
            }if (theText[i]=='S') {
            theText[i]=newalphabet[44];
            }if (theText[i]=='T') {
            theText[i]=newalphabet[45];
            }if (theText[i]=='U') {
            theText[i]=newalphabet[46];
            }if (theText[i]=='V') {
            theText[i]=newalphabet[47];
            }if (theText[i]=='W') {
            theText[i]=newalphabet[48];
            }if (theText[i]=='X') {
            theText[i]=newalphabet[49];
            }if (theText[i]=='Y') {
            theText[i]=newalphabet[50];
            }if (theText[i]=='Z') {
            theText[i]=newalphabet[51];
            }if (theText[i]=='1') {
            theText[i]=newalphabet[52];
            }if (theText[i]=='2') {
            theText[i]=newalphabet[53];
            }if (theText[i]=='3') {
            theText[i]=newalphabet[54];
            }if (theText[i]=='4') {
            theText[i]=newalphabet[55];
            }if (theText[i]=='5') {
            theText[i]=newalphabet[56];
            }if (theText[i]=='6') {
            theText[i]=newalphabet[57];
            }if (theText[i]=='7') {
            theText[i]=newalphabet[58];
            }if (theText[i]=='8') {
            theText[i]=newalphabet[59];
            }if (theText[i]=='9') {
            theText[i]=newalphabet[60];
            }if (theText[i]=='0') {
            theText[i]=newalphabet[61];
            }

        }
        System.out.println (theText);
        input="".valueOf (theText);
    }
    public String output () {
        return input;
    }
}

mfG Veraenderer
 

Anhänge

  • Mein Zeichen program Version 0.01.jar
    7,8 KB · Aufrufe: 2

Final_Striker

Top Contributor
Ich vermute der Fehler liegt in der Schleife mit den vielen if's.

Du veränderst einen Buchstaben nicht nur einmal sondern mehrfach.
A-> F
F-> L
...


Ich würde mich auch darüber freuen, wenn ihr mir Tipps geben könntet wie ich Teile die funktionieren eleganter lösen könnte.

Den neuen
Code:
chars
kann man direkt ausrechnen und braucht keine
Code:
newalphabet
 

JCODA

Top Contributor
Das ist eine meiner zahlreichen Implementierungen davon, eher schlecht, aber "einfacher".

Java:
public class Caesar {
	public static void main(String[] args) {		
			System.out.println(encrypt(-7,"Lpult ylpjolu Thuul klt dbykl zlpul Myhb ryhur, buk hsz zpl mblosal khzz poy Lukl olyhu rht, yplm zpl poy lpugpnlz Avljoalyslpu gb zpjo huz Ilaa buk zwyhjo \"splilz Rpuk, islpi myvtt buk nba, zv dpyk kpy kly splil Nvaa pttly ilpzalolu, buk pjo dpss cvt Opttls hbm kpjo olyhi ispjrlu, buk dpss bt kpjo zlpu.\" Khyhbm aoha zpl kpl Hbnlu gb buk clyzjoplk. Khz Thlkjolu nplun qlklu Ahn opuhbz gb klt Nyhil kly Tbaaly buk dlpual, buk ispli myvtt buk nba. Hsz kly Dpualy rht, kljral kly Zjoull lpu dlpzzlz Abljoslpu hbm khz Nyhi, buk hsz kpl Zvuul pt Mybloqhoy lz dplkly olyhinlgvnlu ohaal, uhot zpjo kly Thuu lpul huklyl Myhb."));
	}	
	static char[] alph = new char[26];		
	static{
		for(char i = 'a';i<='z';i++){
			alph[i-'a'] = i;					
		}
	}	
	public static String encrypt(int shift, String s){
		char[] arr = s.toCharArray();		
		StringBuilder sb = new StringBuilder();			
		for(int i = 0 ; i< arr.length;i++){
			char toAppend;
			if(Character.isAlphabetic(arr[i])){
				char old = Character.toLowerCase(arr[i]);				
				int index = ((old-'a'+shift)%alph.length+alph.length)%alph.length;				
				toAppend = alph[index];				
				if(!Character.isLowerCase(arr[i])){			
					toAppend = Character.toUpperCase(toAppend);
				}								
			}else{
				toAppend=arr[i];
			}
			sb.append(toAppend);
		}		
		return sb.toString();
	}	
}
 

Phash

Top Contributor
du kannst mal eine ASCII Tabelle nehmen, und schauen, welchen Zusammenhang es da zwischen den Buchstaben und deren Wert gibt.

Daraus kannst du einen "Algorithmus" ableiten, wie man den neuen Wert berechnen kann
 
G

Gast2

Gast
statt der if's könntest du auch switch-case-anweisungen nehmen.
Aber ich würde sowieso empfehlen, den Ascii-Wert(char->int) um den Schlüssel zu erhöhen; dann brauchst du nicht die ganzen Fälle:)
 

Veraenderer

Mitglied
Danke für eure schnellen Antworten :) .

@Final_Striker
Irgendwie habe ich schon geahnt das der Fehler simpel ist ^^ .
@Dem Rest
Nochmals vielen Dank für eure Tipps und das Code Beispiel.
 

Daassan

Mitglied
noch ein paar dinge da du, entschuldige, aber recht viel dünnsinn da stehen hast...

bei der berechnung des schlüße wertes könntest % verwenden
dann kannst dir das if inner halb der schleife weglassen
Java:
for (int i=0; i<alphabetl.length(); i++) {
    if ((i+x)<alphabetl.length()) {
        newalphabet [i]=alphabet[i+x];
    } else {
        newalphabet [i]=alphabet[i+x-alphabetl.length()];
}
DIGITIERT ZUUUUUUUUU:
Java:
for (int i=0; i<alphabetl.length(); i++) {
        newalphabet[i]=alphabet[(i+x)%alphabet.length];
}

Hier:
Java:
char [] alphabet=new char[alphabetl.length()];
alphabet=alphabetl.toCharArray();
char [] theText = new char [input.length ()];
theText=input.toCharArray();
char [] newalphabet=new char[alphabetl.length()];

alphabet und theText wieso erzeugst du ein neues leeres array?
das ist unnötig und verbraucht nur ressourcen
da du eh in der nächsten zeile die Referenzen ersetzt
dann kommt mr GC und wirft frische Objekte weg
das is so als würdest du ne Packung käse kaufen
wegwerfen
und mit alten vorhanden käse ersetzen

objekte sidn wie nahrungsmittel :)
nich erzeugen und unbenutzt wegwerfen

joa und das rießen-if kannst einfach einfach umgehen indem du den char in nen byte umwandelst
aber das wurde ja shcon erwähnt ;D

viele grüße

PS. die nächste stufe wäre dann Vigenère cipher? ^^
 

Veraenderer

Mitglied
@Dassan
Danke.
Zu meiner Verteidigung muss ich erwähnen, dass diese Methode schon 3mal fast komplett überarbeitet hatte und dabei ist eben immer mehr Müll zusammen gekommen ;) .
 

strußi

Top Contributor
Einfach lösung ist
String/Char[] unverschlüsselt
char[] schlüssel //verschobenes Alphabet

Java:
private char[] schlüssel( char[] alphabet, verschiebung){
for( int i =verschriebung; i <alphabet.length; i++){
char[ i-verschiebung] schlüssel = alphabet[ i];
}
for( int i=0; i <verschiebung; i++){
char[ alphabet.lenth -verschiebung +i] schlüssel = alphabet[ i];
}
}

Char[] verschlüsselt
//variante String
for( int i =0; i < unverschlüsselt.length(); i++){
If (unverschlüsselt[ 0].equals( 'a')){
verschlüsselt[ i] =schlüssel;
else if(unverschlüsselt[ 0].equals( 'b'){
verschlüsselt[ i] =schlüssel[ 1];
... else{}
}

oder du findes eine schönere Lösung

wenn du nur auf kleinbuchstaben und ohne sonderzeichen verschlüsseln willst
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
R Ceasar Entschlüsselung Java Basics - Anfänger-Themen 7
U Cäsar Verschlüsselung Java Basics - Anfänger-Themen 8
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
A Methoden Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 13
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
Ä Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 5
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
Z Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
V Permutation, Verschlüsselung Java Basics - Anfänger-Themen 19
H Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
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
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
R Frage zu Cäsar - Verschlüsselung! Java Basics - Anfänger-Themen 10
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
J Cäsar Verschlüsselung Java Basics - Anfänger-Themen 12
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
K Cäsar-Verschlüsselung Java Basics - Anfänger-Themen 1
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