![]() |
Kodierungsproblem von Delphi zu Java
Hallo,
ich habe folgendes Problem: ich habe ein verschlüsselungsprogramm in delphi geschrieben und will nun auf diesen verschlüsselten text von java zugreifen. der algorithmus sieht so aus:
Code:
aber wenn ich ihn in java überführe habe ich probleme mit dem unicode, also bin ich auf byte[] ausgewichen, aber der text ist nicht mehr entschlüsselbar :( könnt ihr mir vllt helfen??
function coder(s, key: string; decode: boolean): string;
var i, z: integer; begin if key<>'' then begin for i:=1 to length(s) do begin if not(decode) then begin z:=ord(s[i]); z:=z+ord(key[i mod length(key) + 1]); s[i]:=chr(z); end else begin z:=ord(s[i]); z:=z-ord(key[i mod length(key) + 1]); s[i]:=chr(z); end; end; end; result:=s; end; schonmal vielen dank :) gruß thomas hier der java code:
Code:
private String coder(String sr, boolean decode) {
int[] code = new int[sr.length()]; try { byte[] key = "faselblubberbla".getBytes("ASCII"); byte[] s = sr.getBytes("ASCII"); int count = 0; if (key != null && key.length > 0) { int z = 0; for (int i = 1; i < s.length; i++) { int delta = key[(i+1) % key.length]; if (!decode) { z = s[i]; z = mod(z + delta, 128); code[count] = z; } else { z = s[i]; z = mod(z - delta, 128); code[count] = z; } count++; } } System.out.println(new Character((char) s[0]).toString() +" "+ s[0]); System.out.println(new Character((char) key[0]).toString() +" "+ key[0]); System.out.println(new Character((char) code[0]).toString() +" "+ code[0]); } catch (UnsupportedEncodingException e) { } String str = ""; for (int i = 0; i < sr.length(); i++) { str += new Character((char) code[i]); } return str; } |
AW: Kodierungsproblem von Delphi zu Java
Das normale Unicode-Desaster hast Du bereits ausgeschlossen? Welche Delphi-Version benutzt Du? Sind Unicodeastrings default?
Du solltest auf jeden Fall alle Strings in Delphi ansistring machen. Außerdem kann es Probleme geben, wenn Addition und Subtraktion der Schlüsselbytes den Berecih 0..255 verlassen, also auf beiden Seiten (Delphi und Java) sicherheitshalber schreiben
Delphi-Quellcode:
und nicht mod 128 in Java (bzw. auch in Delphi schreiben
s[i]:=chr(z and $FF);
Delphi-Quellcode:
(Dann darfst Du Dich allerdings nicht wundern, wenn zB "Nö, dös göht nicht!" nach dem Ent/Verschlüssel nicht mehr hergestellt werden kann!)
s[i]:=chr(z and $7F);
Wenn man das alles sieht, fragt man sich wieder einmal, warum immer wieder Leute auf die Idee kommen, unbedingt mit Strings/Chars rechnen zu wollen?! |
AW: Kodierungsproblem von Delphi zu Java
hallo, schonmal danke für die antwort,
das modulo 128 iss nicht das Problem, hab auch schon vorher modulo 256 probiert.. ich verwende Delphi 5. Das Problem ist ja nicht, dass mein Delphi Programm was macht was nicht funktioniert, sondern da klappt das Ver- und Entschlüsseln einwandfrei. Aber wenn ich den verschlüsselten String in Java dekodieren will, funktioniert das nicht. Vllt rechnet Delphi ja anders mit Strings und Chars als Java, wenn ja, wie rechnet Delphi? gruß thomas |
AW: Kodierungsproblem von Delphi zu Java
Dann scheint mir ein kritscher Teil im Javacode zu sein:
Code:
Da delta ja auch einmal größer als z sein kann, ist das Ergebnis dann wohl negativ. Versuch doch mal
z = mod(z - delta, 128);
Code:
(Auf aus Delphiseite würde ein chr(z and 255) die Klarkeit verbessern.)
z = (z - delta) & 255;
Ansonsten ist es sinnvoll, einmal alle einzelnen Zeichen vor und nach der Kodierung dezimal oder hex auszugeben; dann sollte relativ schnell erkennbar sein, was schiefläuft. |
AW: Kodierungsproblem von Delphi zu Java
Java-Strings sind immer Widestrings (UTF16). D.h hier hast du schon Probleme zum Delphi-Ansi-String.
Du müsstest in Java den String mittels getBytes dir als ByteArray zurückgeben lassen (Charset "ISO-8859-1" mal probieren) und dann das ByteArray codieren. |
AW: Kodierungsproblem von Delphi zu Java
hab jetzt ein problem lokalisiert:
die getBytes-Methode liefert mir ne Zeichenkette die nur Fargezeichen enthält ^^ und wie könnte ich das jetzt richtig in ASCII-Code konvertieren? "ASCII"- und "ISO-8859-1"-Charset machen beide das gleiche.. zumindest bei dem key funktioniert die Methode, nur bei dem Text nicht gruß thomas |
AW: Kodierungsproblem von Delphi zu Java
Und wie sieht es aus, wenn du Delphi-seitig schon mal auf WideStrings wechselst?
Bernhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz