Avatar billede clscableguy Praktikant
23. januar 2006 - 10:11 Der er 5 kommentarer og
1 løsning

Hjælp med JvCaesarCipher og ZipForge?

Hejsa

Jeg bruger Delphi 7 og de 2 ovennævte komponenter.

Jeg læser data fra en fil med en TFileStream og så laver jeg en copyfrom til en TMemoryStream.

Så kryptere jeg min TMemoryStream med JvCaesarCipher og så skulle det jo puttes ned i en Zip fil, via ZipForge.

Hvordan kan det være at data'erne ikke bliver krypteret i zip filen?

Her lige lidt kode:

procedure TForm1.Button3Click(Sender: TObject);
var
  fs : TFileStream;
begin
  Button3.Enabled := false;
  Ms1 := TMemoryStream.Create;
  Ms1.SetSize(2048);
  Ms1.Clear;

  fs := TFileStream.Create('C:\temp\P1001228.jpg', fmOpenRead);

  DeleteFile('c:\temp\test.zip');
  ZipForge1.FileName := 'c:\temp\test.zip';
  ZipForge1.OpenArchive;

  repeat
    Button3.Caption := 'Reading';
    Ms1.Clear;
    if fs.size-fs.Position < Ms1.Size then
      Ms1.CopyFrom(fs, fs.size-fs.Position)
    else
      Ms1.CopyFrom(fs, Ms1.Size);

    Button3.Caption := 'Encoding';
    JvCaesarCipher1.EncodeStream('dfasfsa', Ms1);

    Button3.Caption := 'Packing';
    ZipForge1.AddFromStream('P1.jpg', Ms1, False, 0, 0, 32, 0);
    Form1.Caption := IntToStr(fs.Position);
    Application.ProcessMessages;
  until fs.Position >= fs.Size;

  ZipForge1.CloseArchive;
  fs.Free;
  Ms1.Free;

  Button3.Enabled := true;
end;
Avatar billede stoney Nybegynder
23. januar 2006 - 11:06 #1
Er det ikke fordi du pakker P1.jpg i din zip, skal det ikke være P1001228.jpg

Jeg kender ikke Zipforge skal lige siges

Stoney
Avatar billede clscableguy Praktikant
23. januar 2006 - 11:11 #2
P1.jpg i zip delen er det navn som bliver gemt i zip filen. Det hele virker, men zip filen kan udpakkes som normal og som den skal. Men data'erne kan læses som normal og de skulle jo gerne være krypteret.
Avatar billede clscableguy Praktikant
23. januar 2006 - 11:26 #3
JvCaesarCipher komponenten kan hentes her:
http://homepages.borland.com/jedi/jvcl

ZipForge komponenten kan hentes her:
http://www.componentace.com
Avatar billede clscableguy Praktikant
23. januar 2006 - 12:44 #4
hejsa igen har fundet ud af at det er min krypterings komponent der ikke virker rigtigt, når det er Stream der skal krypteres. Men med filer virker den fint.

Er der noget der har en komponent til kryptering?
Avatar billede tolderlund Nybegynder
23. januar 2006 - 12:56 #5
Efter et hurtigt kig:
Du skulle kigge lidt på hvad JvCaesarCipher1.EncodeStream egentlig gør.
Så ville du hurtigt se at den returnerer en TStream med det nye indhold. Denne returværdi ignorerer du. Det giver dig memory leak.
Og så mangler du at nulstille Ms1.Position.
Koden se ca sådan ud:
  Ms1.Position := 0;
  MsNy := JvCaesarCipher1.EncodeStream('dfasfsa', Ms1);
Jeg har ikke kigget efter andre fejl.
Avatar billede clscableguy Praktikant
23. januar 2006 - 13:00 #6
Takker :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester