Szyfrowanie pliku

Odpowiedz Nowy wątek
2006-10-02 14:13
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?

Pozostało 580 znaków

2006-10-02 14:36
0

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

Pozostało 580 znaków

2006-10-02 14:55
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;

Pozostało 580 znaków

2006-10-02 15:42
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.

Pozostało 580 znaków

2006-10-02 16:47
piotrekdp(nielogowan
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

Pozostało 580 znaków

2006-10-02 17:23
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

Pozostało 580 znaków

2006-10-02 17:36
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;

<font color="red">Konto porzucone</span>

Dzięki wszystkim forumowiczom za lata wspólnych dyskusji; miłej zabawy w programowanie!
Sławomir 'Szczawik' Włodkowski

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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