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
Trwałe usuwanie plików.
- Rejestracja: dni
- Ostatnio: dni
- Rejestracja: dni
- Ostatnio: dni
Nadpisz zawartość pliku śmieciami i usuń. Plik odzyskasz, ale ze zniszczoną zawartością.
- Rejestracja: dni
- Ostatnio: dni
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 :/
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
Nie wiedzialem ze jest taka funkcja jak BlockWrite, która to realizuje. Dzieki wielkie :)
- Rejestracja: dni
- Ostatnio: dni
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?
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
Losowana długość pliku jest zwykle większa od bufora. Może to powoduje błąd.
- Rejestracja: dni
- Ostatnio: dni
Nie, kurde, błąd był w parametrach dla BlockWrite. Tak dawno nie używałem, że zapomniałem jakie są.
- Rejestracja: dni
- Ostatnio: dni
Hmmm... A po co marnowac czas na wymyslanie smieci (mam na mysli ten random)? Czy nie wystarczy zapisac pliku np. spacjami?
- Rejestracja: dni
- Ostatnio: dni
Serdeczne Dzięki Oleksy_Adam :-) Wszystko dziala bez zarzutu. Widać że zdolny z Ciebie programista. Pzdr
- Rejestracja: dni
- Ostatnio: dni
Super wszystko, a jak odzyskać teraz ten plik?
- Rejestracja: dni
- Ostatnio: dni
Mysle ze teraz sie nie da. Chociaz kto wie, może wojsko albo rząd mają specjalne programy.
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 501
A jeśli chcesz mieć 100% pewność, to nadpisz tym sposobem ze 100 razy, wtedy już chyba nic nie pomoże
- Rejestracja: dni
- Ostatnio: dni
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.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 3356
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.