![]() |
TChipher in Funktion neu initialisieren mit neuem Passwort
Hallo ich bin neu hier, also bitte nich hauen... :roteyes:
ich möchte gerne in einer Funktion einen Stream 2x verschlüsseln mit unterschiedlichen Passwörtern und versuche dafür TCipher_Blowfish erneut zu erstellen mit einem neuen Passwort, aber das klappt nicht. Es wird immer nur das Passwort der ersten Initialisierung verwendet, aber warum??? Ich habe es auch schon mit "destroy" und "nil" probiert aber es klappt alles nicht... Hier der Code:
Delphi-Quellcode:
Für jeden Hinweis wäre ich überaus dankbar!!!
procedure TForm1.Button1Click(Sender: TObject);
var stream, stream_neu: TMemoryStream; var groesse: LongInt; begin stream := TMemoryStream.Create; stream_neu := TMemoryStream.Create; stream.LoadFromFile('C:\test.txt'); groesse := stream.Size; with TCipher_Blowfish.Create('', nil) do try InitKey('test', nil); EncodeStream(stream, stream_neu, groesse); stream_neu.SaveToFile('c:\test1.txt'); finally Free; end; with TCipher_Blowfish.Create('', nil) do try InitKey('test2', nil); EncodeStream(stream, stream_neu, groesse); stream_neu.SaveToFile('c:\test2.txt'); finally Free; end; stream.Destroy; stream_neu.Destroy; end; Viele Grüsse, Tom [edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit] |
Re: TChipher in Funktion neu initialisieren mit neuem Passwo
Hai thy,
wenn ich das richtig Sehe musst Du deine Streams vor dem zweiten Verschlüsseln wieder auf den Anfang positionieren. (Genaueres wird wohl wieder nur negaH wissen).
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var stream, stream_neu: TMemoryStream; groesse: LongInt; begin stream := TMemoryStream.Create; stream_neu := TMemoryStream.Create; try stream.LoadFromFile('C:\test.txt'); groesse := stream.Size; with TCipher_Blowfish.Create('test', nil) do begin try EncodeStream(stream, stream_neu, groesse); stream_neu.SaveToFile('c:\test1.txt'); finally Free; end; end; stream.Position := 0; // Position des Quellstreams auf Anfang setzen. stream_neu.Position := 0; // Position des Zielstreams auf Anfang setzen. with TCipher_Blowfish.Create('test2', nil) do begin try EncodeStream(stream, stream_neu, groesse); stream_neu.SaveToFile('c:\test2.txt'); finally Free; end; end; finally FreeAndNil (stream); FreeAndNil (stream_neu); end; end; |
Re: TChipher in Funktion neu initialisieren mit neuem Passwo
Hi Sharky,
vielen Dank für den Tipp. Das habe ich komplett übersehen und jetzt klappt es!!! :spin2: Danke! Gruss, Tom |
Re: TChipher in Funktion neu initialisieren mit neuem Passwo
Zitat:
Ach ja: "Herzlich Willkommen in der Delphi-PRAXIS" |
Re: TChipher in Funktion neu initialisieren mit neuem Passwo
was für ein toller Einstand. Meine erste Frage und so schnell eine erfolgreiche Hilfe. Ich bin schwer glücklich, denn ich habe mir die letzten Nächte damit um die Ohren geschlagen eine Lösung dafür zu finden... :wall:
|
Re: TChipher in Funktion neu initialisieren mit neuem Passwo
@thy, @sharky,
das ist aber kein DEC spezifisches Problem, sondern ein "konzeptionelles Feature" aller TStream Operationen. Also auch zB. beim Laden einer Klasse aus einer DFM in einem Stream wird der interne Positionszeiger nicht automatisch an den Anfang zurückgesetzt. Dies ist absolut logisch denn im gleichen Stream könnten viele sequentiell gespeicherte DFM's == Daten abgelegt sein. Somit darf eine beliebige Streambasierte Operation niemals den Stream-Zeiger automatisch umsetzen. Dies ist immer Aufgabe des Programmieres. Gruß hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:07 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