chars verschwinden

kaetzacoatl

Bekanntes Mitglied
Hallo,
ich hab grad ein Verschlüsselungsprogramm
geschrieben, dass auch wunderbar funktioniert,
allerdings verschwinden beim entschlüsseln ein
paar chars. Einfach mal längere Texte eingeben:
Java:
public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String str = encode(br.readLine());
		System.out.println(str);
		System.out.println(decode(str));
	}
	
	public static String decode(String str){
		byte[] b = str.getBytes();
		for(int i = 0;i < b.length;i++){
			if(i % 3 == 0)b[i]--;
			else if(i % 5 == 0)b[i]+=2;
			else if(i % 2 == 0)b[i]*=0.5;
			else b[i]++;
		}	
		char[] c = new char[b.length];
		for (int i = 0; i < c.length; i++) {
			c[i] = (char) b[i];
		}
		return String.valueOf(c);
	}
	
	public static String encode(String str){
		byte[] b = str.getBytes();
		for(int i = 0;i < b.length;i++){
			if(i % 3 == 0)b[i]++;
			else if(i % 5 == 0)b[i]-=2;
			else if(i % 2 == 0)b[i]*=2;
			else b[i]--;
		}
		char[] c = new char[b.length];
		for (int i = 0; i < c.length; i++) {
			c[i] = (char) b[i];
		}
		return String.valueOf(c);
	}
 

Mujahiddin

Top Contributor
Das liegt daran, dass bytes nur bis 125 gehen und es dann bei -126 weitergeht.
So eine Art von Verschlüsselung ist im Grunde genommen keine gute Idee, weil deine Zeichen nicht im ASCII Bereich bleiben.
 

Mujahiddin

Top Contributor
Ich mach das auch nur so,
aber ich finde es ist ne nette
Übung, die man immer mal
wieder machen kann.

Das Problem daran ist, dass du entweder einen Overflow kriegst (mit bytes) oder über den ASCII Bereich rausfliegst (mit chars).
Was du machen könntest, ist, deine chars in Zahlen wandeln und so damit rumaddieren/subtrahieren. Später musst du aber die Stellen kennen etc. Ist aber dafür nicht anfällig für Zeichensalat.
 

bERt0r

Top Contributor
Funktioniert denn das ganze überhaupt? Wenn du "A" (65) verschlüsseln willst machst durch
Java:
else if(i % 5 == 0)b[i]-=2;
daruas ein "?" (63). Beim eintschlüsseln ist aber 63%5 nicht mehr 0 und du rechnest durch
Java:
else b[i]++;
nicht 2 dazu sondern nur 1 und kommst auf "@"
 

kaetzacoatl

Bekanntes Mitglied
Funktioniert denn das ganze überhaupt? Wenn du "A" (65) verschlüsseln willst machst durch
Java:
else if(i % 5 == 0)b[i]-=2;
daruas ein "?" (63). Beim eintschlüsseln ist aber 63%5 nicht mehr 0 und du rechnest durch
Java:
else b[i]++;
nicht 2 dazu sondern nur 1 und kommst auf "@"
i ist der Index des Arrays.

Ich hab denn Fehler gefunden:
else if(i % 2 == 0)b*=0.5;
funtioniert sheinbar nicht,
da die Zeichen dort falsch
dargestellt werden.
Ich vermute das dabei Werte
rauskommen die größer als
byte sind und hab diese
Zeile ersetzt.
 

Ähnliche Java Themen

Neue Themen


Oben