Autor Beitrag
Manfred
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: Mi 26.11.14 16:02 
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: www.php-einfach.de/s...nerator_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:

ausblenden 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="

_________________
Computer können schneller rechnen als wir, deshalb machen sie auch mehr Fehler
baka0815
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 489
Erhaltene Danke: 14

Win 10, Win 8, Debian GNU/Linux
Delphi 10.1 Berlin, Java, C#
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: 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.

_________________
Computer können schneller rechnen als wir, deshalb machen sie auch mehr Fehler
Manfred Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 90



BeitragVerfasst: 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.

_________________
Computer können schneller rechnen als wir, deshalb machen sie auch mehr Fehler