Einzelnen Beitrag anzeigen

Twigeater

Registriert seit: 4. Mär 2009
4 Beiträge
 
#1

Problem mit Umstellung DEC 3 nach DEC 5.2

  Alt 11. Mär 2009, 07:33
Hallo!

War bisher nur gelegentlicher Beobachter eures Forums, jetzt hab ich da aber ein Problem bei dessen Lösung mir vielleicht hier jemand helfen kann.

Wir verwenden bisher DEC 3 zur Verschlüsselung (Details s.u.) von nicht wirklich kritischen Informationen und möchten nun auf 5.2 umstellen (alles noch in D7). Vorgabe ist das die bereits verschlüsselten Dateien weiterhin lesbar sein müssen und auch neu codierte in alten Programmen funktionieren. Das hat auch mit den diversen Hinweisen in diesem Forum gut funktioniert, insbesondere 'Umstellung DEC 3.0 auf 5.2' war sehr hilfreich. Danke schon mal dafür.

Nun hab ich meine Unit Tests (Verschlüsseln mit 3+5 und Ergebnis in HEX vergleichen) erweitert und das hat ein Problem aufgedeckt, das ich vorher nicht gesehen hatte. Haben die Eingangsdaten eine bestimmte Größe ist das Ergebnis ziwschen 3+5 unterschiedlich. Das tritt zum ersten mal auf wenn die Daten zwischen 138 und 143 Bytes lang sind und wiederholt sich ab da dann in einem Muster das ich noch nicht erkenne. Dazwischen funktioniert aber alles wunderbar. Das paarweise Ver-/Entschlüsseln innerhalb jeder Version funktioniert unabhängig von der Länge immer einwandfrei.

Wäre toll wenn jemand eine Idee hätte.

Matthias


Hier der Code aus 3 (etwas vereinfacht):

Delphi-Quellcode:
function Decode(const aSomeText : AnsiString) : string;
var
  cipher : TCipher_Blowfish;
  b : string;
begin
  cipher := TCipher_Blowfish.Create('abcedefghijk', nil);

  try
    b := cipher.DecodeString(aSomeText);
    result := TStringFormat_HEX.StrTo(PChar(b), length(b));
  finally
    cipher.Free();
  end;
end;
Hier meine Anpassung an 5.2 (etwas vereinfacht):

Delphi-Quellcode:
function Decode(const aSomeText : AnsiString) : string;
var
  cipher : TCipher_Blowfish;
  I : Integer;
  hash : THash_RipeMD256;
  IVector : Binary;
  password : Binary;
  b : Binary;
begin
  cipher := TCipher_Blowfish.Create();
  cipher.Mode := cmCTSx;

  hash := THash_RipeMD256.Create;
  try
    hash.Init;
    password := 'abcedefghijk';
    hash.Calc(password[1], length(password));
    hash.Done;

    I := hash.DigestSize;
    if I > cipher.Context.KeySize then I := cipher.Context.KeySize; {generaly will truncate to large Keys}

    cipher.Init(Hash.Digest^, I, IVector[1], 0);

    b := cipher.DecodeBinary(aSomeText);

    result := TFormat_HEX.Encode(b[1], length(b));
  finally
    cipher.Free();
    hash.Free();
  end;
end;
  Mit Zitat antworten Zitat