Trwałe usuwanie plików.

0

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

0

Nadpisz zawartość pliku śmieciami i usuń. Plik odzyskasz, ale ze zniszczoną zawartością.

0

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 :/

0

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.

0

Nie wiedzialem ze jest taka funkcja jak BlockWrite, która to realizuje. Dzieki wielkie :)

0

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?

0

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.
0

Losowana długość pliku jest zwykle większa od bufora. Może to powoduje błąd.

0

Nie, kurde, błąd był w parametrach dla BlockWrite. Tak dawno nie używałem, że zapomniałem jakie są.

0

Hmmm... A po co marnowac czas na wymyslanie smieci (mam na mysli ten random)? Czy nie wystarczy zapisac pliku np. spacjami?

0

Serdeczne Dzięki Oleksy_Adam :-) Wszystko dziala bez zarzutu. Widać że zdolny z Ciebie programista. Pzdr

0

Super wszystko, a jak odzyskać teraz ten plik?

0

Mysle ze teraz sie nie da. Chociaz kto wie, może wojsko albo rząd mają specjalne programy.

0

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.

0

A jeśli chcesz mieć 100% pewność, to nadpisz tym sposobem ze 100 razy, wtedy już chyba nic nie pomoże

0
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.

0
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.

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