Einzelnen Beitrag anzeigen

Assertor

Registriert seit: 4. Feb 2006
Ort: Hamburg
1.296 Beiträge
 
Turbo C++
 
#8

Re: PHP in Pascal:mcrypt_ecb(MCRYPT_DES, $a, $b, MCRYPT_ENCR

  Alt 28. Jul 2008, 19:45
Hi walter_b,

zunächst mal aus der DECFmt.pas:
Delphi-Quellcode:
TFormat_Copy = class; // copy input to output, it's the Default Format, eg FormaClass = nil
TFormat_HEX = class; // HEXadecimal in UpperCase
TFormat_HEXL = class; // HEXadecimal in Lowercase
TFormat_MIME32 = class; // MIME like format for Base 32
TFormat_MIME64 = class; // MIME Base 64 format
TFormat_PGP = class; // PGP's MIME Base 64 with PGP's Checksums
TFormat_UU = class; // Unix UU Base 64
TFormat_XX = class; // Unix XX base 64
TFormat_ESCAPE = class; // Escaped Strings
Jetzt zu Deinem Source, da hast Du leider per Copy-Paste, ohne es zu verstehen, meinen Blödsinn einfach übernommen

Probier mal folgendes
Delphi-Quellcode:
function EncodeText(Input, Key: String): String;
begin
  with TCipher_1DES.Create do
  try
    Mode := cmECBx;
    Init(Key);
    Result := EncodeBinary(Input); // bitte bei EncodeText() auch EncodeBinary nutzen und NICHT DecodeBinary!
  finally
    Free;
  end;
end;

function DecodeText(Input, Key: String): String;
begin
  with TCipher_1DES.Create do
  try
    Mode := cmECBx;
    Init(Key);
    Result := DecodeBinary(Input); // hier stand bei Dir DecodeBinary('abc', TFormat_HEXL);
  finally
    Free;
  end;
end;
Beachte:
1) Hinter EncodeBinary/DecodeBinary kannst Du einen zweiten Parameter angeben, z.B. EncodeBinary(Input, TFormat_HEXL). Damit werden die Eingabe/Ausgabedaten formatiert, d.h. es wird ein bestimmtes Eingabeformat erwartet bzw. ausgegeben.
2) Dein Fehler kommt dann auch daher: Du gibst, wie in meiner ersten Antwort, TFormat_HEXL an - aber bei Deinem Source wird etwas anderes genutzt, als Daten im HEX Format...
3) Zudem solltest Du, wenn Du schon den Key per Funktionsparameter übergibst, auch den Input/Outputtext per Parameter übergeben. Sonst kann die Funktion ja nur den -einen- vorgegeben Text ver/entschlüsseln.
4) Du verwendest einfaches DES ohne SALT und IV (Initialisierungsvektor). Hart gesagt: Dann brauchst Du im Prinzip auch garnicht zu verschlüsseln.

Zitat von walter_b:
Wobei hier der "Key" der Hash-Wert ist, welcher vorhin bei EncodeBinary rauskam.
Falsch. Das ist ganz sicher kein Hash...

Die Funktion arbeitet nach dem Prinzip:
Input = Eingabe-Text
Key = Passwort im Klartext (bei beiden Funktionen!)
Result = Ergebnis

Zitat von walter_b:
Zitat von Delphi:
... raised exception class EDECExeption with message 'Input is not an valid HEXL Format.'. Process stopped.
Was soll dieser Schwachsinn? Wieso kann ich es mit diesem Wert verschlüsseln, wenn ich es mit dem selben Wert nicht rückverschlüsseln kann? Wie kann ich diese Problem umgehen?
Das frage ich mich auch. Willst Du Deinen Blödsinn etwa dem Delphi Compiler or dem Autoren anlasten?

Gruß Assertor
Frederik
  Mit Zitat antworten Zitat