Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - DEC 5.2 DecodeBinary von PHP-Strings
Manfred - Mi 26.11.14 16:02
Titel: DEC 5.2 DecodeBinary von PHP-Strings
Hallo Delphi-Gemeinde,
ich empfange mit meiner Anwendung Blowfish-verschlüsselte Daten. Gepackt werden diese mittels PHP und einer Klasse namens blowfish.class.php
Siehe hier:
http://www.php-einfach.de/sonstiges_generator_blowfish.php
Nun muss ich die von dort empfangene Zeichenkette also entschlüsseln, dazu verwende ich DEC 5.2 unter Delphi 6 (historisch gewachsene Anwendung)
Mein Ansatz sieht nun so aus:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15:
| function Blowfish_Decrypt ( data , key : widestring ) : widestring ; var cipher: TDECCipher; begin cipher := nil; Result := ''; try cipher := ValidCipher(TCipher_Blowfish).Create; cipher.Mode := cmCBCx; cipher.Init(key); Result := cipher.DecodeBinary(data); finally FreeAndNil(cipher); end; end; |
Das Resultat ist jedoch alles andere als befriedigend. Es entstehen lediglich Hieroglyphen.
Zunächst dachte ich an den Mode, doch ich habe durchweg alle probiert. Soweit ich weiß, ist cmCBCx eigentlich auch korrekt, aber ich bin nicht sonderlich erfahren in der Cryptographie.
Hat jemand eine Idee, was ich tun könnte?
PHP erstellt z.B. folgende Zeichenkette:
Text = "Dies ist ein Test"
Passwort = "passwort"
Ergebnis = "AA3zZwANhMzxZ5WtZgzY13AwULw17FiuqVdGj858kYY="
baka0815 - Mi 26.11.14 17:14
Das Ergebnis scheint noch Base64 kodiert zu sein.
Du musst diesen Text also erst dekodieren um die Binärdaten zu bekommen und diese kannst du dann mit Blowfish entschlüsseln.
Gammatester - Mi 26.11.14 17:22
Noch eine Warnung: DEC's Modus cmCBCx ist nicht-standard, wenn der Text kein Vielfaches der Blcoklänge ist.
Manfred - Mi 26.11.14 18:23
@baka0815
Ich habe bereits versucht, den String zu dekodieren. Allerdings sehen die dadurch entstehenden Strings völlig anders aus, als es DEC beim Encode selbst erstellt. Daher ging ich davon aus, dass DEC einen Bas64-String erwartet.
aber:
@Gammatester
genau da sitzt vermutlich mein Problem. Die mir angebotenen TCipherMode's
cmCTSx, cmCBCx, cmCFB8, cmCFBx, cmOFB8, cmOFBx, cmCFS8 und cmCFSx
habe ich bereits probiert, der Mode cmECBx wirft hingegen einen Fehler:
Exception der Klasse EOleException: Vorgang konnte aufgrund des folgenden Fehers nicht fortgesetzt werden: 80020101
Was auch immer das bedeuten mag. Ich gehe daher einfach mal davon aus, dass cmECBx nicht das Richtige ist.
Manfred - Fr 28.11.14 18:11
Das Experimentieren mit anderen Verschlüsselungsmethoden hat mir vermutlich die Augen geöffnet:
Der zu entschlüsselnde String wird von der Webseite als UTF-8 geschickt. Nach dem Entschlüsseln befindet sich also z.B. "ü" anstelle eines "ü"-Zeichens.
Das ist ja auch soweit korrekt, da es sich ja um einen UTF-String handelt, der nun aber in einer widestring-Variablen steckt. Das führt dazu, dass diese Konstellation als 2 Zeichen angesehen wird.
utf8toansi löst das Problem zwar theoretisch, doch mir gehen z.B. kyrillische Zeichen verloren. Diese werden dann als "?" dargestellt.
Mit welcher Methode kann ich denn nun einen "echten" UTF8-String erhalten?
Danke.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!