Szyfrowanie plikow nietextowych

0

Ta funkcja jest gdzies na tej stronie (moze troche ja przerobilem):

function Szyfruj(sString, Password : String) : String;
var
I : Integer;
PassCount : Integer;
begin
PassCount := 0;
Result := sString; * przypisz wartosc poczatkowa
for I := 1 to Length(sString) do * wykonuj dla kazdej litery osobno
begin
{
Dla kazdego osobnego znaku zamieniaj na wartosc liczbowa, a nastepnie
xoruj z kazda litera hasla - powstaje wowczas unikalna kombinacja.
}
Result[i] := Chr(Ord(sString[i]) xor Ord(Password[PassCount]));
Inc(PassCount); * wieksz licznik - kolejne slowo hasla

  •  if PassCount &gt Length(Password) then PassCount := 0;  // Jezeli licznik przekroczy dlugosc hasla - wyzeruj
    
    end;
    end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Word := Szyfruj(memo1.Text, edit1.Text);
memo1.Text := Word;
end;

No fajnie ale szyfruje ona text z memo. A jak zrobic aby szyfrowala plik.--pozdrawiam PEDROS {hello}
Delphi6

0

Tak sobie pomyslalem ze mozna wykozystac procedure ktora mi jakis czas temu napisal pq:

var
F: file of byte;
bajt:byte;
const
mojkod :byte=$ab; *na przyklad
begin
AssignFile(F,edit1.Text);
Reset(F);

  • tu wstawialem bajt:=bajt+10
    read(F,bajt);
    bajt:=bajt xor mojkod;
    Seek(F,0);
    write(F,bajt);
    CloseFile(F);
    end;

probowalem z tym. Wydawalo mi sie ze jak przed odczytaniem zrobie bajt:=bajt+10 to powinno zmodyfikowac 10 bajt a modyfikuje nadal tylko pierwszy ;( --pozdrawiam PEDROS {hello}
Delphi6

0

Pedros napisał:

&gtvar
&gtF: file of byte;
&gtbajt:byte;
&gtconst
&gt mojkod :byte=$ab; *na przyklad
&gtbegin
&gt AssignFile(F,edit1.Text);
&gt Reset(F);
&gtSeek(F,9) *9 a nie 10 bo liczy sie pliki od 0
&gt read(F,bajt);
&gt bajt:=bajt xor mojkod;
&gt Seek(F,9); &lt/p&gt
&gt write(F,bajt);
&gt CloseFile(F);
&gtend;

&gtprobowalem z tym. Wydawalo mi sie ze jak przed odczytaniem zrobie bajt:=bajt+10 to powinno zmodyfikowac 10 bajt a modyfikuje nadal tylko pierwszy ;(

Zle Ci sie wydawalo :)))))))
--Pawel {Delphi6 }

Po pierwsze: naciśnij F1

0

sorry za niedomkniecie--Pawel {Delphi6 }

Po pierwsze: naciśnij F1

0

Hmm.. a widziałeś Ty w tamty kodzie jakąś pętle? Bo chyba nie - co jak łatwo si domyśleć oznacza, że działa tylko na jeden bajt. Zresztą jeśli dobrze pamiętam po to był stworzony ten kod - by zaszyfrować pierwszy bajt pliku.

Poza tym:

&gtprocedure TForm1.Button1Click(Sender: TObject);
&gtbegin
&gt Word := Szyfruj(memo1.Text, edit1.Text);
&gt memo1.Text := Word;
&gtend;
&gt
&gtNo fajnie ale szyfruje ona text z memo. A jak zrobic aby szyfrowala plik.

Hmm.. rzeczywiście - ta funkcja szyfruje tylko tekst z memo.... bo tak jej podałeś?
Pomijając fakt optymalizacji kodu - lepiej by było:
memo1.text := Szyfruj(memo1.Text, edit1.Text);
Możesz używać tej drugiej, którą napisał pq, jesli dodasz tam pętle (oczywiście jeśli łapiesz co ona robi i dodasz pętle tam gdzie trzeba).
--, tradycyjnie pozdrawiam - Numi.

0

No wiec napisalem sobie taka procedurke:

procedure TForm1.kodowanie(filename: string);
var
size:integer;
i:longint;
F: file of byte;
bajt:byte;
const
mojkod :byte=$ab; *na przyklad &lt==to musi byc stala a nie moze byc zmienna?
begin
AssignFile(F,FileName);
Reset(F);
size:=filesize(f);
showmessage(inttostr(size));
for i:=1 to size do
begin
Seek(F,i); *9 a nie 10 bo liczy sie pliki od 0 &lt== w tym miejscu wyskakuje mi blad: I/O Error 103 moglby mi ktos powiedziec dlaczego i moze jeszcze jak zrobic zeby nie wyskakiwal
read(F,bajt);
bajt:=bajt xor mojkod;
Seek(F,i);
write(F,bajt);
CloseFile(F);
end;
end;
--pozdrawiam PEDROS {hello}
Delphi6

0

Pedros napisał:
I/O Error 103 moglby mi ktos powiedziec dlaczego i moze jeszcze jak zrobic zeby nie wyskakiwal

bo zamknales plki (CloseFile(F)) wewnatrz petli!!!! wiec za drugim obrotem (i nastepnymi) program probowal zrobic Seek na nieotwartym pliku. Wywal CloseFile za przedostatni end;
--Pawel {Delphi6 }

Po pierwsze: naciśnij F1

0

Pedros napisał:

&gt mojkod :byte=$ab; //na przyklad &lt==to musi byc stala a nie moze byc zmienna?

może być zmienna, tylko zeby byla ta sama wartosc przy szyfrowaniu i deszyfrowaniu. Mozesz tez uzywac roznych wartosci mojkod dla roznych bajtow pliku (bedzie trudniej odszyfrowac osobie postronnej) tylko jakos zapamietaj zeby przy odszyfrowywaniu sie nie pomylic :)))--Pawel {Delphi6 }

Po pierwsze: naciśnij F1

0

Dzieki za wszystko pq. Bardzo mi pomogles :-) --pozdrawiam PEDROS {hello}
Delphi6

0

Tu znowu ja :-). Jak teraz zamykam plik juz poza petla ale jest problem innego typu. Pokzauje mi sie taki komunikat:

Debugger Exception Notification

Project WP.exe raised exception class EInOutError with message 'Read beyond end of file'. Process stopped. Use Step or Run to continue.

OK Help

Znaczek w znaczek skopiowalem. Teraz wywala mi blad:

procedure TForm1.kodowanie(filename: string);
var
size:integer;
i:longint;
F: file of byte;
bajt:byte;
const
mojkod :byte=$ab;
begin
AssignFile(F,FileName);
Reset(F);
size:=filesize(f);
showmessage(inttostr(size));
for i:=1 to size do
begin
Seek(F,i);
read(F,bajt); //teraz tu mam blad i pokzuje sie kominukat jak napisalem wyzej
bajt:=bajt xor mojkod;
Seek(F,i);
write(F,bajt);
end;
CloseFile(F);

Moze mi ktos pomoc :( --pozdrawiam PEDROS {hello}
Delphi6

0

Pedros napisał:
Tu znowu ja :-). Jak teraz zamykam plik juz poza petla ale jest problem innego typu. Pokzauje mi sie taki komunikat:
&gt---------------------------
&gtDebugger Exception Notification
&gt---------------------------
&gtProject WP.exe raised exception class EInOutError with message 'Read beyond end of file'. Process stopped. Use Step or Run to continue.

Ile razy pisalem ze pliki licza sie od zera!!!!!!!!!

for i:=0 to Pred(size) do--Pawel {Delphi6 }

Po pierwsze: naciśnij F1

0

pq napisał:
&gtfor i:=0 to Pred(size) do
No teraz juz dziala idealnie. Tylko chcialbym wiedziec (tak z czystej ciekawosci:-)) po co jest to pred.
I jeszcze jedna sprawa jak zaczne w petli for i:=10 to ... to to nie znaczy ze program zacznie zmieniac bajty od 10.--pozdrawiam PEDROS {hello}
Delphi6

0

Pedros napisał:
pq napisał:
&gt&gtfor i:=0 to Pred(size) do
&gtNo teraz juz dziala idealnie. Tylko chcialbym wiedziec (tak z czystej ciekawosci:-)) po co jest to pred.
&gtI jeszcze jedna sprawa jak zaczne w petli for i:=10 to ... to to nie znaczy ze program zacznie zmieniac bajty od 10.
&gt

Pred(i) to to samo co i-1

jak dasz for i=10 to zacznie zmieniac od 11-go bajtu (bo licza sie od zera :))--Pawel {Delphi6 }

Po pierwsze: naciśnij F1

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