AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Kodierungsproblem von Delphi zu Java
Thema durchsuchen
Ansicht
Themen-Optionen

Kodierungsproblem von Delphi zu Java

Ein Thema von athomas · begonnen am 15. Aug 2011 · letzter Beitrag vom 16. Aug 2011
Antwort Antwort
athomas

Registriert seit: 4. Okt 2007
21 Beiträge
 
#1

Kodierungsproblem von Delphi zu Java

  Alt 15. Aug 2011, 23:57
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:
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;
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??
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;
    }
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#2

AW: Kodierungsproblem von Delphi zu Java

  Alt 16. Aug 2011, 08:47
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 s[i]:=chr(z and $FF); und nicht mod 128 in Java (bzw. auch in Delphi schreiben s[i]:=chr(z and $7F); (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!)

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?!
  Mit Zitat antworten Zitat
athomas

Registriert seit: 4. Okt 2007
21 Beiträge
 
#3

AW: Kodierungsproblem von Delphi zu Java

  Alt 16. Aug 2011, 11:17
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
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#4

AW: Kodierungsproblem von Delphi zu Java

  Alt 16. Aug 2011, 12:13
Dann scheint mir ein kritscher Teil im Javacode zu sein:
Code:
z = mod(z - delta, 128);
Da delta ja auch einmal größer als z sein kann, ist das Ergebnis dann wohl negativ. Versuch doch mal
Code:
z = (z - delta) & 255;
(Auf aus Delphiseite würde ein chr(z and 255) die Klarkeit verbessern.)

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.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.197 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Kodierungsproblem von Delphi zu Java

  Alt 16. Aug 2011, 13:07
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
athomas

Registriert seit: 4. Okt 2007
21 Beiträge
 
#6

AW: Kodierungsproblem von Delphi zu Java

  Alt 16. Aug 2011, 13:16
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
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#7

AW: Kodierungsproblem von Delphi zu Java

  Alt 16. Aug 2011, 13:30
Und wie sieht es aus, wenn du Delphi-seitig schon mal auf WideStrings wechselst?

Bernhard
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:48 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz