Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#48

AW: DB-Zugangsdaten verschlüsseln

  Alt 25. Aug 2018, 15:37
Das ist die XOR-Verschlüsslungsfunktion.

Aber bei manchen Werten baut sie Mist.
Das liegt daran, daß man Unicode-Strings nicht einfach per XOR ver- und entschlüsseln kann. Das mag in früheren Delphi Versionen noch funktioniert haben, als ein Char noch ein Byte groß war und der OEM-Zeichensatz zu jedem Byte ein Zeichen kannte. Mit Unicode gilt das aber nicht mehr und man sollte dann auf Byte-Sequenzen für das Crypting ausweichen. Um weiterhin mit Strings arbeiten zu können, weil die Datentypen nun mal nicht so einfach im gesamten Programm umgestellt werden können, kann man die Byte-Sequenzen z.B. per Base64 encoden. Der String wird dabei aber etwas länger.
Delphi-Quellcode:
uses
  System.SysUtils, System.NetEncoding;

function Decrypt(const Source, Password: string): string;
var
  bPassword: TBytes;
  bSource: TBytes;
  I: Integer;
begin
  Result := '';
  bSource := TNetEncoding.Base64.DecodeStringToBytes(Source);
  bPassword := TEncoding.UTF8.GetBytes(Password);
  for I := 0 to Length(bSource) - 1 do begin
    bSource[I] := bSource[I] xor bPassword[I mod Length(bPassword)];
  end;
  result := TEncoding.UTF8.GetString(bSource);
end;

function Encrypt(const Source, Password: string): string;
var
  bPassword: TBytes;
  bSource: TBytes;
  I: Integer;
begin
  Result := '';
  bSource := TEncoding.UTF8.GetBytes(Source);
  bPassword := TEncoding.UTF8.GetBytes(Password);
  for I := 0 to Length(bSource) - 1 do begin
    bSource[I] := bSource[I] xor bPassword[I mod Length(bPassword)];
  end;
  result := TNetEncoding.Base64.EncodeBytesToString(bSource);
end;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat