[Delphi] Szyfrowanie danych

0

Witam.
Mam taki problem. Robię sobie progsa który będzie szyfrował mi pliki(trochę to głupie bo takich programów jest b. dużo ale ja chcę mieć swój) no więc aby zaszyfrować plik otwieram go w RichEdit i wykonuje na nim jakąś operację (zamieniam jedne znaczki na inne) . I mam taki problem bo jak otworzę sobie inny plik niż taki który zawiera tekt (no wiecie txt, html, ini i takie tam ) to wszystko jest OK a jak otworzę sobie plik typu np. mp3 to już tak fajnie nie jest bo do RichEdit ładuje się kilka 'bochomazów' które wg. tego komponentu stanowią cały plik. No więc może sprecyzuję pytanie :
Jak otwożyć inne pliki które nie zawierają textu tylko jakieś 'bochomazy'.
Dla przykłądu jak otworzę taki plik (mp3) w HexEditorze zmienię kilka znaczków i zapiszę go w postaći zmienionej a potem otowrzę ten zmieniony (w HexEditorze oczywiście) i zamienię z powrotem znaczki na takie które były wcześniej to wszystko jest OK.
Proszę o pomoc może Od razu jakiś kodzik lub sugestie lub adresik do strony z gotowcem

pozdrow From LUSIO

0

zalduj plik to TMemoryStream albo do innego buforu (moze byc dlugi string). Wtedy ladowanie nie bedzie sie wiazalo ze zmianami informacji. --Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

0

To nie jest takie trudne...
Ja programuje w Pascalu i wiem, że problem może polegać na niewłaściwm dobraniu typu pliku. Jestem pewien, że zainicjowałeć zmienną pliku typu text (pascal) lub textfile (delphi).

Jeżeli chcesz robić operacje na innch plikach to musisz zmienić typ zmiennej np. na file of char.

Kodzik kodujący wyglądałby tak:

var plik : file of char;
znak : char;
begin
assignfile (plik,'pliczek.txt');
reset (plik);
while not eof (plik) do
begin
read (plik,znak);
seek (plik,filepos (plik)-1);
znak:=chr(ord(znak)+30); {zmiana char'a na większego o 30}
write (plik,znak);
end;
closefile (plik);
showmessage ('Operacja zakończona');
end;

Ta procedura może trochę długo trwać (najlepiej nie rób operacji na plikach większych niż 2mb). Jeżeli, już ci na tym bardzo zależy to spraw aby program zmieniał kilka pierwszych kb najlepiej zmieniając pętle while na for.

Kamil Kopeć

0

&gtTa procedura może trochę długo trwać

wlasnie dlatego lepiej plik zaladowac do pamieci w calosci (lub duzymi fragmentami, jak jest wielki) przez BlockRead albo przez odpowiednia metode TMemoryStream, a nie ladowac z dysku znak po znaku,

--
Pawel {Delphi 6 Personal}

Po pierwsze: naciśnij F1

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