Szyfrowanie pliku

0

Mam napisany program, ktory szyfruje plik metoda XOR (tzn. konwertuje kazdy znak na ASCII, XORuje kluczem), i gdy probuje otworzyc rozszyfrowany plik (np. bitmape) program pokazuje "Podgląd niedostępny". Co mam robic?

0

pewnie masz błąd w funkcji szyfrującej :P

0

Oto funkcja szyfrująca:

var
znakow,i,ascii,ascii2,j: integer;
znak: char;
haslo: string;
begin
progressbar1.Position:=0;
znakow:=length(memo1.Text);
progressbar1.Max:=length(memo1.Text);
for i:=1 to znakow do begin
znak:=memo1.text[i];
ascii:=ord(znak);
ascii2:=ord(haslo[i]);
ascii:=ascii xor form2.i;
znak:=chr(ascii);
memo2.Text:=memo2.Text+znak;
progressbar1.Position:=progressbar1.Position+1;
sleep(1);
end;
memo2.Lines.SaveToFile(edit1.Text+'.rsa');

end;
0

nie wiem, nie znam, sie, ale jak na moje oko to nie powinienes uzywac memo.
nie jestem pewien ale memo chyba nie zapisze Ci niektorych znakow...
uzyj file of.

0

Nie można zapisywac tego jako tekst bo tekst gubi znaki nieliterowe tzn np nie zapisze bajtów 1,3,4 idd poczekaj napisze ci na memory stream

0

Jednak mi sie nie chce rozgryzać co porobiłeś masz inny przykład tu zrozzumesz o co mi chodzi

procedure Kodowanie(PlikPrzed,PlikPo:String ;KodowanyZnakiem:Shortint);
var
Buffer:Byte;
PlikOryginalny,PlikZaszyfrowany:TMemoryStream;
begin
PlikOryginalny:=TmemoryStream.Create;     //tworze sobie zmienną memorystream
PlikOryginalny.LoadFromFile(PlikPrzed);    // Wczytuje plik do niej 
PlikOryginalny.Position:=0;        // ustawiam wskaźnik na początek pliku

PlikZaszyFrowany:=TMemoryStream.Create; // tworze drugą zmienną 
PlikZaszyfrowany.Size :=PlikOryginalny.Size; // Daje jej taki sam rozmiar jaki ma plik oryginalny
PlikZaszyfrowany.Position:=0;    // Ustawiam na początek

Repeat // powtarzam dopóki nie osiągne końca pliku

PlikOryginalny.ReadBuffer(Buffer,1);   // czytam sobie bajt pliku
Buffer:=Buffer+KodowanyZnakiem; // dodaje do niego jakąś wartość
PlikZaszyfrowany.Write(Buffer,1)  ;// Zapisuje ten bajt W zmiennej reprezentującej zaszyfrowany plik

until PlikOryginalny.Position =PlikOryginalny.Size ;

PlikZaszyfrowany.SaveToFile(PlikPo) ; // Zapisuje zakodowany plik
PlikZaszyfrowany.Free; // zwalniam obie zmienne 
PlikOryginalny.Free;
end;
procedure TForm1.KodujClick(Sender: TObject);
begin
if Open.Execute then Kodowanie(Open.FileName ,Open.FileName+'.cod' ,3); // przy kodowaniu dodaje 3 do każdego bajtu
end;

procedure TForm1.DekodujClick(Sender: TObject);
begin
 Kodowanie(Open.FileName ,Saved.FileName ,-3);// przy dekodowaniu odejuje 3 od każdego bajtu
end;


end.

program trywialnie koduje ale chodziło mi o pokazanie w jaki sposób możesz zakodować każdy plik

0
procedure Szyfruj(FileIn, FileOut:TFileName; Key:Byte);
var Stream:TMemoryStream;
    i:Int64;
begin
Stream:=TMemoryStream.Create;
try
  Stream.LoadFromFile(FileIn);
  i:=0;
  while (i<Stream.Size) do
    begin
    PByte(Integer(Stream.Memory)+i)^:=PByte(Integer(Stream.Memory)+i)^ xor Key;
    inc(i);
    end;
  Stream.SaveToFile(FileOut);
finally
  Stream.Free;
  end;
end;

1 użytkowników online, w tym zalogowanych: 0, gości: 1