AGB  ·  Datenschutz  ·  Impressum  







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

AnsiString speichern und laden

Ein Thema von Willie1 · begonnen am 9. Mär 2021 · letzter Beitrag vom 16. Mär 2021
Antwort Antwort
Seite 3 von 3     123   
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#21

AW: AnsiString speichern und laden

  Alt 14. Mär 2021, 20:48
Ich weis nicht, ob ich dir damit helfe, wenn ich mORMot ins Spiel bringe. Der Thread ist aber schon etwas länger und die Unit SynCommons enthält viele nützliche Funktionen für den Programmiereralltag. mORMot ist von D7 bis 10.4 verfügbar. Muss nicht installiert werden, es reicht, die Bibliothekspfade zu setzen. Den Download findest du hier. Es steht eine ausführliche Hilfe, viele Beispiele und ein freundliches Forum zur Verfügung.

Umgesetzt im Anfangsbeispiel:
Delphi-Quellcode:
uses
  SynCommons;
  
procedure TForm1.Button2Click(Sender: TObject);
begin
  if Txt = 'then Exit;
  SynCommons.FileFromString(Txt, Path);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  Txt := SynCommons.StringFromFile(Path);
  Memo1.Text := UTF8ToString(Txt);
end;
Disclaimer: Ich weis schon, Kanonen auf Spatzen ... mORMot ist bei mir inzwischen in jedem Projekt und im Alltag inzwischen eine unverzichtbare Allzweckwaffe.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#22

AW: AnsiString speichern und laden

  Alt 14. Mär 2021, 21:28
Binärdaten in Strings waren noch nie eine super Idee.
Alternativen gibt es zu Genüge und wurden Einige genannt.
$2B or not $2B
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
472 Beiträge
 
#23

AW: AnsiString speichern und laden

  Alt 14. Mär 2021, 21:50
@Willie1: Auch wenn du es nicht hören wolltest, Kryptografie ist mit den richtigen Units vernünftig umzusetzen. Nimm besser die folgenden Funktionen:
Delphi-Quellcode:
uses
  SynCommons, SynCrypto, SynZip;

const
  KEY_FILE_HEADER = 'TOPSECRET';
  KEY_FILE_HEADER_SIZE = Length(KEY_FILE_HEADER);

function SaveToFile(const pmcRaw, pmcPassword: RawByteString; const pmcFileName: TFileName): Boolean;
begin
  Result := False;
  if (pmcRaw <> '')
    and (pmcPassword <> '')
    and (DirectoryExists(ExtractFilePath(pmcFileName))) then
  begin
    Result := FileFromString(KEY_FILE_HEADER + SynCrypto.AESSHA256(SynZip.CompressString(pmcRaw), pmcPassword, True), pmcFileName);
  end;
end;

function LoadFromFile(const pmcFileName: TFileName; const pmcPassword: RawByteString; out pmcRaw: RawByteString): Boolean;
var
  sSrc, sOut: RawByteString;
begin
  Result := False;
  if (pmcPassword <> '')
    and FileExists(pmcFileName) then
  begin
    sSrc := StringFromFile(pmcFileName);
    if (sSrc <> '')
      and (PosEx(KEY_FILE_HEADER, sSrc, 1) = 1) then
    begin
      SetString(sOut, Nil, Length(sSrc) - KEY_FILE_HEADER_SIZE);
      SynCrypto.AESSHA256(PAnsiChar(sSrc) + KEY_FILE_HEADER_SIZE, Pointer(sOut), Length(sOut), pmcPassword, False);
      pmcRaw := SynZip.UnCompressString(sOut);
      Result := (pmcRaw <> '');
    end;
  end;
end;
Anwenden kannst du das wie folgt:
Delphi-Quellcode:
procedure TForm1.btnSaveClick(Sender: TObject);
begin
  if SaveToFile(StringToUTF8(memoTopSecret.Text), 'Willie1', ChangeFileExt(ParamStr(0), '.key')) then
    memoTopSecret.Clear;
end;

procedure TForm1.btnLoadClick(Sender: TObject);
var
  secStr: RawByteString;
begin
  if LoadFromFile(ChangeFileExt(ParamStr(0), '.key'), 'Willie1', secStr) then
    memoTopSecret.Text := UTF8ToString(secStr);
end;
Bis bald...
Thomas
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: AnsiString speichern und laden

  Alt 14. Mär 2021, 21:52
Damit er erstmal dennoch weiterkommt
ohne extras die delphi nicht besitzt
für das Experiment habe ich mal was getippst hier in Editor, in der Hoffnung das wichtigste zu zeigen.

Delphi-Quellcode:
uses System.NetEncoding, System.IniFiles;

function WilliEnc(const AValue: AnsiString): AnsiString;
var
  Nibble: AnsiString;
begin
  Nibble := AValue;
  // mach hier dein nibble ding


  // hier verpacken wir alles in ein Base64
  Nibble := TNetEncoding.Base64.Encode(Nibble);
  Exit(Nibble);
end;

function WilliDec(const AValue: AnsiString): AnsiString;
var
  Bytes: TBytes;
  Nibble: AnsiString;
begin
  // hier wird aus dem base64 wieder ein ansistring, und zwar nur ein ansistring (!)
  Bytes := TNetEncoding.Base64.DecodeStringToBytes(AValue);
  Nibble := TEncoding.ANSI.GetString(Bytes);
  // ab dieser stelle ist der geladene base64 kodierte inhalt wieder dein original ansistring
  // also mach ab hier dein nibble ding :-)


  Exit(Nibble);
end;

function LoadData: string;
var
  Ini: TIniFile;
begin
  Result := '';
  if FileExists('name.ini') then
    begin
      Ini := TIniFile.Create('name.ini');
      try
        Result := WilliDec(Ini.ReadString('Sektion', 'Ident', ''));
      finally
        Ini.Free;
      end;
    end;
end;

procedure SaveData(const AValue: string);
var
  Ini: TIniFile;
begin
  Ini := TIniFile.Create('name.ini');
  try
    Ini.WriteString('Sektion', 'Ident', WilliEnc(AValue));
  finally
    Ini.Free;
  end;
end;



// exemplarische Anwendung

procedure TForm1.btnLoadClick(Sender: TObject);
begin
  Edit1.Text := LoadData;
end;

procedure TForm1.btnSaveClick(Sender: TObject);
begin
  SaveData(Edit1.Text);
end;
nicht getestet, nur getippt

...roter text beim speichern oh oh...


//edit
an Thomas: ich bin voll auf deiner seite!
Gruß vom KodeZwerg

Geändert von KodeZwerg (14. Mär 2021 um 21:57 Uhr)
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#25

AW: AnsiString speichern und laden

  Alt 15. Mär 2021, 11:27
Hallo,
da brauche ich Zeit, um das alles bewerten zu können. Mit der Kryptographie stimmt natürlich, es gibt eine komplette AES-Verschlüsselung als Delphi-Unit von einem Uni-Mathematiker aus Kiel, muss mal sehen, ob ich das noch wiederfinde.
Mein Ansatz hat ja Fehler: zB. das Zeichen #255 und eine Zeichenkette = Linie wie ---- usw. würde es sofort offenbaren.
Ich werde eure Erklärung ernst nehmen und "nachdenken".
Willie.
Gut hören kann ich schlecht, schlecht sehen kann ich gut - Ersteres stimmt nicht, das zweite schon.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: AnsiString speichern und laden

  Alt 15. Mär 2021, 11:42
Hallo,
da brauche ich Zeit, um das alles bewerten zu können. Mit der Kryptographie stimmt natürlich, es gibt eine komplette AES-Verschlüsselung als Delphi-Unit von einem Uni-Mathematiker aus Kiel, muss mal sehen, ob ich das noch wiederfinde.
Mein Ansatz hat ja Fehler: zB. das Zeichen #255 und eine Zeichenkette = Linie wie ---- usw. würde es sofort offenbaren.
Ich werde eure Erklärung ernst nehmen und "nachdenken".
Willie.
Hallo Willie,

wie Du bemerkst wollen Dir ja viele helfen, mein Vorschlag, öffne einen neuen Thread so das wir da uns mit Kryptographie beschäftigen können.
Es gibt tausende Möglichkeiten wie man etwas verschlüsseln könnte.
Enorm viel geht schon mit Delphi Bordmitteln, oft läuft es auf ein XOR hinaus.
Bitmanipulation muss natürlich sehr durchdacht sein.
Aber das wichtigste ist halt alles auf den richtigen Datentyp abzustimmen.

Nur nicht Kopf in den Sand stecken, zusammen packen wir das schon
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Willie1

Registriert seit: 28. Mai 2008
668 Beiträge
 
Delphi 10.1 Berlin Starter
 
#27

AW: AnsiString speichern und laden

  Alt 16. Mär 2021, 10:39
mein Vorschlag, öffne einen neuen Thread so das wir da uns mit Kryptographie beschäftigen können.
KodeZwerg ich werde einen neuen Thread eröffnen. Willie.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   

 

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 21:00 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