AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi StringList "verschlüsseln": welche Methode ist am Besten?
Thema durchsuchen
Ansicht
Themen-Optionen

StringList "verschlüsseln": welche Methode ist am Besten?

Ein Thema von juergen · begonnen am 11. Jun 2009 · letzter Beitrag vom 18. Jun 2009
Antwort Antwort
Benutzerbild von himitsu
himitsu
Online

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

Re: StringList "verschlüsseln": welche Methode ist

  Alt 17. Jun 2009, 01:29
ich glaub langsam lern ich auch noch die knuffigen Class-Helper lieben


Delphi-Quellcode:
Uses EncryptedStringLists;

Var SL: TStringList;

SL.LoadFromFile('name.txt', 'pass');
Memo1.Lines.SaveToFile('name.txt', 'pass');
und sobald man diese Unit in seine Uses-Liste aufgenommen hat, sind bei allen Nachfahren von TStrings die Funktionen LoadFromFile, SaveToFile, LoadFromStream und SaveToStream mit einer neue Version überladen, wo man einfach nur noch das Passwort anzugeben baucht (das sllte so ab D2006/TDE möglich sein, oder ab wann die Class-Helper halt eingeführt wurden)




nur gibt es ein Problem ...
der Class-Helper selber sollte so doch OK sein (zumindestens nach maximovs Beispielen) ... denk ich mal

aber dennoch gibt es einen Decodierfehler, beim Einlesen der Datei

mein TestCode
Delphi-Quellcode:
Memo1.Lines.SaveToFile('name.txt', 'pass');
Memo1.Lines.Clear;
Memo1.Lines.LoadFromFile('name.txt', 'pass');
und wenn ich es Debugge, dann steht in CRC vorm

PS:
Delphi-Quellcode:
// RCStreamDeco.pas
procedure ProtectString(var Value: String);
begin
  FillChar(Pointer(Value)^, Length(Value), 0);
end;
ist nicht unicodetauglich

hier die nötigen Änderungen:
Delphi-Quellcode:
procedure ProtectString(var Value: String);
  FillChar(Pointer(Value)^, Length(Value) * SizeOf(Char), 0);

procedure TRCxStreamDecorator.WriteSalt(Size: Byte = 16);
  WriteBuffer(Pointer(Salt)^, Size * SizeOf(Char));

procedure TRCxStreamDecorator.ReadSalt;
  ReadBuffer(Pointer(Salt)^, Size * SizeOf(Char));
Aber das hilft auch nun nicht wirklich weiter, denn alleine ReadSalt ließt schon was anderes ein, als WriteSalt geschrieben hat und bricht dann natürlich mit der EInvalidDecryption ab.


[add]
hab mich nochmal rangesetzt und konnte nun den Fehler nahezu eindeutig in Hagens RCx-Unit ausmachen
Denn nach nachfolgenden Änderungen funktioniert der Streamdecodierer und mein Code fehlerfrei.
Gut, abgesehn davon, daß die Daten nun unverschlüsselt durchgereicht wurden.

Und es ist kein D2009 Problem, auch mit D2006 ging es nicht.
Delphi-Quellcode:
function TRCStreamDecorator.Read(var Buffer; Count: Integer): Integer;
begin
  result := FStream.Read(Buffer, count);
// case EncodeMode of
// emEncodeWriting: Decode(Buffer, Buffer, Result); // abstrakter aufruf
// emEncodeReading: Encode(Buffer, Buffer, Result); // abstrakter aufruf
// end;
end;

function TRCStreamDecorator.Write(const Buffer; Count: Integer): Integer;
var
  temp:pointer;
begin
  GetMem(temp, count);
// case EncodeMode of
// emEncodeWriting: Encode(Buffer, temp^, Count); // abstrakter aufruf
// emEncodeReading: Decode(Buffer, temp^, Count); // abstrakter aufruf
// end;
  result := FStream.Write(Buffer{temp^}, count);
  FreeMem(temp, count);
end;
OK und nach einigen Änderung (siehe Anhangt ... die paar SizeOf(Char) darin und ich hoff mal ich habe soweit alles gefunden) läuft es nun auch in D2009 richtig
(allerdings sind die mit D2009 verschlüsselten Dateien nicht kompatibel mit Dateien älterer Compiler und umgekehrt)

[edit]
ein winziges Leerzeichen entfernt
Angehängte Dateien
Dateityp: pas encryptedstringlists_206.pas (2,3 KB, 25x aufgerufen)
Dateityp: zip projekte_168.zip (4,8 KB, 30x aufgerufen)
Ein Therapeut entspricht 1024 Gigapeut.
  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 13:50 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