Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi TChipher in Funktion neu initialisieren mit neuem Passwort (https://www.delphipraxis.net/27287-tchipher-funktion-neu-initialisieren-mit-neuem-passwort.html)

thy 7. Aug 2004 08:55


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:
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;
Für jeden Hinweis wäre ich überaus dankbar!!!

Viele Grüsse,
Tom

[edit=Sharky]Delphi-Tags gesetzt. Mfg, Sharky[/edit]

Sharky 7. Aug 2004 09:42

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;

thy 7. Aug 2004 10:23

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

Sharky 7. Aug 2004 10:25

Re: TChipher in Funktion neu initialisieren mit neuem Passwo
 
Zitat:

Zitat von thy
....und jetzt klappt es!!! ...

Freut mich :-D

Ach ja: "Herzlich Willkommen in der Delphi-PRAXIS"

thy 7. Aug 2004 10:32

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:

negaH 24. Sep 2004 14:58

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