Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi [DEC] Verschlüsselung als Kopieren (https://www.delphipraxis.net/135984-%5Bdec%5D-verschluesselung-als-kopieren.html)

xZise 21. Jun 2009 16:48


[DEC] Verschlüsselung als Kopieren
 
Hallo ihr,

ich benutze das DEC um ein Teil meiner Daten zu verschlüsseln. Das Problem ist nun aber, dass ich das Passwort ändern kann. Und wenn ich es auf einen Leerstring ändere, dann soll er es gar nicht verschlüsseln. Im allgemeinen macht mir das diese Methode:
Delphi-Quellcode:
procedure TDatenbankBasis.AenderePasswort(const ANeuesPasswort: string; const AWrapper : TDatenbankWrapper);
const
  UPDATE_QUERY = 'UPDATE Personen SET %s = "%s" WHERE PersonenID = %d';
var
  SLAlteVornamen : TStrings;
  SLAlteNachnamen : TStrings;
  ILPersonenIDs : TIntegerList;
  Cipher : TDECCipher;
  i: Integer;
begin
  SLAlteNachnamen := TStringList.Create;
  SLAlteVornamen := TStringList.Create;
  ILPersonenIDs := TIntegerList.Create;
  // Je nach Passwort
  if ANeuesPasswort = '' then
  begin
    Cipher := TCipher_Null.Create; // nur kopieren
  end else
  begin
    Cipher := TCipher_Rijndael.Create; // Oder richtig verschlüsseln
  end;
  try
    // Zuerst die alten Namen entschlüsselt holen
    GibStringListZuSQL([SLAlteVornamen, SLAlteNachnamen], ILPersonenIDs, 'PersonenID', 'Vorname, Name', 'Personen', '', [True, True], AWrapper as TDatenbankBasis);
    // Cipher mit neuem Passwort initieren
    Cipher.Init(ANeuesPasswort);
    // Und dann die Namen kopieren
    BeginTransaction;
    try
      for i := 0 to ILPersonenIDs.Count - 1 do
      begin
        ExecSQL(Format(UPDATE_QUERY, ['Vorname', Cipher.EncodeBinary(SLAlteVornamen[i], TFormat_HEXL), ILPersonenIDs[i]]), AWrapper);
        Cipher.Done;
        ExecSQL(Format(UPDATE_QUERY, ['Name', Cipher.EncodeBinary(SLAlteNachnamen[i], TFormat_HEXL), ILPersonenIDs[i]]), AWrapper);
        Cipher.Done;
      end;
    finally
      Commit;
    end;
  finally
    Cipher.Free;
    ILPersonenIDs.Free;
    SLAlteVornamen.Free;
    SLAlteNachnamen.Free;
  end;
end;
Das wichtigste an diesem Code ist die Schleife. Wenn wir da angekommen sind, steht in SLAlteVornamen und SLAlteNachnamen der Inhalt unverschlüsselt. Meine Idee war nun, dass ich am Anfang je nach Passwort AES oder Null nehme. Und bei Null dachte ich, dass er nichts macht, außer das zu kopieren. das tut er aber leider nicht. Gibt es eine ähnlich elegante Methode das zu entschlüsseln?

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:56 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