Witam
Poszukuję algorytmu, dzięki któremu będę mógł trwale usunąć pliki, tak żeby nie było możliwości ich odzyskania. Gdzieś kiedyś widzialem to na pewnej stronce, ale nie moge tego znalejść. Za pomoc z góry dzięki
Nadpisz zawartość pliku śmieciami i usuń. Plik odzyskasz, ale ze zniszczoną zawartością.
Tak, ale zeby to zrobić potrzebny jest algorytm na pobranie w którym sektorze znajdują sie pliki i w tych sektorach nadpisać np: 100razy jakimiś śmieciami. Nie wystarczy samo FileDelete i FileCreate w tym samym miejscu. Ja niestety tego zrobić nie umiem :/
Jakie sektory? Otwórz plik, zapisz mu śmieci, zapisz go i dopiero usuń.
Plik ma 4B.
AssignFile(F, 'plik.sss');
Rewrite(F, 1);
BlockWrite(F, LongInt(Random(999999));
CloseFile(F);
DeleteFile();
Nadpisanie zawartości jest dość skuteczne.
Nie wiedzialem ze jest taka funkcja jak BlockWrite, która to realizuje. Dzieki wielkie :)
Przy lini "BlockWrite(F, LongInt(Random(999999));" którą napisaleś kompilator wyskakiwal ze jest błąd. Sprawdzilem w encyklopedii i zauwazylem ze brakowalo jednego parametru buff. Napisałem więc coś takiego:
procedure TForm1.UsunTrwale(Plik: String);
var
F: File;
i: integer;
Buff : array[0..1024] of Byte;
begin
for i:=1 to 1000 do
begin
AssignFile(F, Plik);
Rewrite(F, 1);
BlockWrite(F, Buff, Random(65000));
CloseFile(F);
end;
DeleteFile(Plik);
end;
Po tym zabiegu program odpala, jednak w programie przy linii BlockWrite wyskakuje taki błąd:
Project Usuwacz.exe raised exception class EInOutError with message I/O error 1784. Process stopped. Use Step or Run to continue
Czy jesteś w stanie mi jeszcze pomóc?
Mój błąd. Naskrobałem program do generowania losowej wartości pliku. Rozmiar bufora 4kb. Kombinuj.
program Project2;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
// rozmiar bufora - 4kb
BufSize = 4096;
type
// bufor ze śmieciami
TRandomBuf = array [0..BufSize-1] of Byte;
var
BytesLeft :LongInt; // ile zostało bajtów do zapisania
BufferLeft:LongInt; // rozmiar bufora lub to co zostanie
F :file;
RandomBuf :TRandomBuf;
// zapełnianie bufora wartościami losowymi
procedure InitBuf(var ABuf :TRandomBuf);
var
i :SmallInt;
begin
Randomize;
for i := 0 to BufSize-1 do
begin
ABuf[i] := Random(256);
end;
end;
begin
AssignFile(F, 'd:\plik.txt');
Reset(F, 1);
BytesLeft := FileSize(F);
CloseFile(F);
Rewrite(F, 1);
while BytesLeft > 0 do // do momentu zapisania całego pliku
begin
InitBuf(RandomBuf); // generuj bufor
if BytesLeft >= BufSize then
BufferLeft := BufSize // jak większe niż bufor to bufor
else
BufferLeft := BytesLeft; // jak nie to tyle ile plik ma bajtów
BlockWrite(F, RandomBuf, BufferLeft); // zapis
Dec(BytesLeft, BufferLeft); // aktualizacja licznika
end;
CloseFile(F);
end.
Losowana długość pliku jest zwykle większa od bufora. Może to powoduje błąd.
Nie, kurde, błąd był w parametrach dla BlockWrite. Tak dawno nie używałem, że zapomniałem jakie są.
Hmmm... A po co marnowac czas na wymyslanie smieci (mam na mysli ten random)? Czy nie wystarczy zapisac pliku np. spacjami?
Serdeczne Dzięki Oleksy_Adam :-) Wszystko dziala bez zarzutu. Widać że zdolny z Ciebie programista. Pzdr
Super wszystko, a jak odzyskać teraz ten plik?
Mysle ze teraz sie nie da. Chociaz kto wie, może wojsko albo rząd mają specjalne programy.
Są metody. Niemniej jeżeli nie masz dojścia do zaawansowanego sprzętu i wiedzy to zaśmiecenie pliku i jego skasowanie wystarczy na 98% domowych przypadków.
A jeśli chcesz mieć 100% pewność, to nadpisz tym sposobem ze 100 razy, wtedy już chyba nic nie pomoże
WIktorDelphi napisał(a)
Hmmm... A po co marnowac czas na wymyslanie smieci (mam na mysli ten random)? Czy nie wystarczy zapisac pliku np. spacjami?
Można, ale moja metoda niszczy zawartość pliku (jeżeli to binarny) tak, że w pierwszej chwili nawet nie wiadomo, że został zniszczony. Nie ma sekwencji powtarzających się bajtów. Do do prędkości. Można nie inicjować nowego bufora co zapis, tylko raz na starcie.
manfredek napisał(a)
A jeśli chcesz mieć 100% pewność, to nadpisz tym sposobem ze 100 razy, wtedy już chyba nic nie pomoże
Szkoda dysku na takie zabawy. W dodatku przy źle dobranym ziarnie liczb losowych (lub broń boże stałych - vide spacje), 100 krotne nadpisanie czasem da się odzyskać. Wystarczy za to poczytać o doborze wartości zgodnie z algorytmem Gutmann'a, by ograniczyć taką możliwość do zakresu cudów.