AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

DB-Zugangsdaten verschlüsseln

Ein Thema von Ykcim · begonnen am 21. Aug 2018 · letzter Beitrag vom 27. Aug 2018
Antwort Antwort
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: DB-Zugangsdaten verschlüsseln

  Alt 25. Aug 2018, 14: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
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: DB-Zugangsdaten verschlüsseln

  Alt 25. Aug 2018, 15:33
Ich habe gerade mal mein Demo mit Unicode gefüttert, funktioniert bei mir Problemlos, bei Euch auch? (wegen Hinweis von Uwe mit älteren Delphis, was meines definitiv ist [D2009])
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: DB-Zugangsdaten verschlüsseln

  Alt 25. Aug 2018, 16:02
Ich habe gerade mal mein Demo mit Unicode gefüttert, funktioniert bei mir Problemlos, bei Euch auch? (wegen Hinweis von Uwe mit älteren Delphis, was meines definitiv ist [D2009])
Das Nicht-Auftreten eines Fehlers ist allerdings kein Garant für Fehlerfreiheit. Probier mal als Password -134775814 und als Orginal String Hurz

Edit: Der Trick hierbei ist, ein #0 zu provozieren. Das wird dann beim Schreiben in das Edit als Stringbegrenzer betrachtet. Würde man nur mit Delphi-Strings arbeiten, dann tritt zumindest dieser Fehler nicht auf. Es könnte aber immer noch Probleme im Unicode-Bereich der Surrogates geben.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming

Geändert von Uwe Raabe (25. Aug 2018 um 16:15 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: DB-Zugangsdaten verschlüsseln

  Alt 25. Aug 2018, 17:16
Das Demo arbeitet korrekt, Anzeige macht natürlich bei einem Terminator Schluss, habe es gerade überprüft.
Also intern (wovon ich Ausgehe das es nur intern abgewickelt wird) läuft es.
Screenshot - 25_08.jpg Da sieht man das es 4 Zeichen kodiert sind.
Habe einfach Labels für Länge mit rangebaumelt.
Ich schrieb ja weiter oben, bei Problemen mit Output wäre Base64 empfehlenswert.

Bei Bedarf aktualisiere ich Demo indem ich auch Base64 zwischen schubse.
(Dein Code kann mein Delphi noch nicht, die Unit fehlt mir)
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: DB-Zugangsdaten verschlüsseln

  Alt 25. Aug 2018, 18:08
Nach suchen suchen suchen, mein Delphi hat Base64 nur in Indy anscheinend verbaut, also habe ich ein anderes Base64 integriert.

Nun sollte es keine Probleme mehr mit Anzeige geben.
Es wäre nett wenn aktuellere Delphis das mal Compilieren und berichten ob es funktioniert, auch in Zusammenhang mit Unicode. Besten Dank!

Viel Spaß damit.


Ps: Die Base64.pas von Sakura aus CodeLib arbeitet irgendwie so gar nicht mit meinem Delphi zusammen.

Edit
Ganz vergessen, hier der Null-Terminator Test: Screenshot - 25_08 002.jpg
Angehängte Dateien
Dateityp: 7z Delphi String Crypt v2.7z (192,1 KB, 14x aufgerufen)
Gruß vom KodeZwerg

Geändert von KodeZwerg (25. Aug 2018 um 21:08 Uhr)
  Mit Zitat antworten Zitat
Ykcim

Registriert seit: 29. Dez 2006
Ort: NRW
856 Beiträge
 
Delphi 12 Athens
 
#6

AW: DB-Zugangsdaten verschlüsseln

  Alt 27. Aug 2018, 12:51
Endlich! Das klappt so! Ich habe es mit Delphi XE2 und es klappt.
Ich habe auch getestet, ob ich die Werte in einer Datei zwischenspeichern kann und nach dem Auslesen funktioniert das DeCrypt auch.

VIELEN DANK!

Patrick
Angehängte Dateien
Dateityp: 7z Delphi_String_Crypt_Test.7z (9,8 KB, 8x aufgerufen)
Patrick
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: DB-Zugangsdaten verschlüsseln

  Alt 27. Aug 2018, 14:09
Das freut mich das Dein Dilemma vorerst behoben ist

Wenn Du noch ein Sample benötigst wo das ganze in einer Binär-Datei abgelegt & gelesen wird, einfach Fragen
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz