AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

35 Mal überschreiben

Ein Thema von HW764 · begonnen am 29. Jul 2004 · letzter Beitrag vom 19. Nov 2004
Antwort Antwort
Seite 1 von 3  1 23      
HW764
(Gast)

n/a Beiträge
 
#1

35 Mal überschreiben

  Alt 29. Jul 2004, 17:08
Ich habe diesen Code, der eine Datei 6 mal überschreibt.
Nun will ich, dass er diese Datei 35 Mal überschreibt.
Was muss ich ändern? (Beim Pfeil "Hier")

Delphi-Quellcode:
procedure EraseFile(Filename: string);
const
  Buffer = 1024;
  FillBuffer: array[0..5] of Integer = ($00, $FF, $00, $F0, $0F, $00); //<-- Hier
var
  arr: array[1..Buffer] of byte;
  f: file;
  i, j, n: integer;
begin
  AssignFile(f, FileName);
  Reset(f, 1);
  n := FileSize(f);
  for j := 0 to 5 do
  begin
    for i := 1 to n div Buffer do
    begin
      BlockWrite(f, FillBuffer[j], Buffer);
    end;
  end;
  CloseFile(f);
  RenameFile(Filename, ExtractFilepath(Filename)+'$000000.tmp');
  DeleteFile(ExtractFilepath(Filename)+'$000000.tmp');
end;
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: 35 Mal überschreiben

  Alt 29. Jul 2004, 17:14
Ich denke, du musst überall die "5" durch die "34" ersetzen. Bin mir aber nicht sicher.

Edit: Zu der Klammer: Weißt du, was die einzelnen Werte bedeuten?
  Mit Zitat antworten Zitat
StefanDP

Registriert seit: 11. Apr 2004
294 Beiträge
 
#3

Re: 35 Mal überschreiben

  Alt 29. Jul 2004, 17:17
"FillBuffer" wird "das" sein, was nacheinander über die datei geschrieben wird!
mach einfach was in der art
Code:
  FillBuffer: array[0..35] of Integer = ($00, $FF, $00, $F0, $0F, $00, $FF, $00, $F0, $0F, $00, $FF, $00, $F0, $0F, $00, $FF, $00, $F0, $0F, $00...)
draus
oder lass dein fillbuffer und änder deine schleife in etwas wie ungefähr:
Delphi-Quellcode:
  for j := 0 to 35 do
  begin
    for i := 1 to n div Buffer do
    begin
      BlockWrite(f, FillBuffer[j mod 5], Buffer);
    end;
  end;
vom prinzip her halt, nicht getestet

stefan
  Mit Zitat antworten Zitat
Benutzerbild von flomei
flomei

Registriert seit: 17. Jan 2003
Ort: Schieder-Schwalenberg
2.094 Beiträge
 
Delphi 2005 Personal
 
#4

Re: 35 Mal überschreiben

  Alt 29. Jul 2004, 17:17
Das was in der Klammer steht ist doch der "Fill Buffer".
Ist also nur das womit überschrieben wird, oder?!?

Wenn überhaupt, dann würde ich das wie Matze schon sagt die 5 in der for-Schleife durch eine 35 ersetzen. Das ist ja ne Zählervariable die angibt wie oft überschrieben wird...

MfG Florian

[edit] Oh... derbe zu spät... [/edit]
Florian Meier
... ist raus.
Vielen Dank für die Zeit mit euch!
http://www.flomei.de -- http://www.md5hash.de
  Mit Zitat antworten Zitat
Benutzerbild von Spezi1980
Spezi1980

Registriert seit: 11. Aug 2003
Ort: Dresden OT Cossebaude
71 Beiträge
 
Delphi 2005 Personal
 
#5

Re: 35 Mal überschreiben

  Alt 29. Jul 2004, 17:18
Bitte:

Delphi-Quellcode:
procedure EraseFile(Filename: string);
const
  Buffer = 1024;
  Counttowrite = 34;
  FillBuffer: array[0..5] of Integer = ($00, $FF, $00, $F0, $0F, $00); //<-- Hier
var
  arr: array[1..Buffer] of byte;
  f: file;
  i, j, n: integer;
begin
  AssignFile(f, FileName);
  Reset(f, 1);
  n := FileSize(f);
  for j := 0 to Counttowrite do
  begin
    for i := 1 to n div Buffer do
    begin
      BlockWrite(f, FillBuffer[j], Buffer);
    end;
  end;
  CloseFile(f);
  RenameFile(Filename, ExtractFilepath(Filename)+'$000000.tmp');
  DeleteFile(ExtractFilepath(Filename)+'$000000.tmp');
end;
Die Konstante "Counttowrite" gibt an wieviel mal du das überschreiben willst.

[OT] war wohl etwas zu langsam [/OT]
Robert
Codito, ergo sum.
>>I code, therefore I am<<
  Mit Zitat antworten Zitat
HW764
(Gast)

n/a Beiträge
 
#6

Re: 35 Mal überschreiben

  Alt 29. Jul 2004, 17:38
Was muss ich jetzt an deinem Code ändern, wenn ich es 35 mal
überschreiben will?
Etwa so???

Delphi-Quellcode:
procedure EraseFile(Filename: string);
const
  Buffer = 1024;
  Counttowrite = 34;
  FillBuffer: array[0..5] of Integer = ($00, $FF, $00, $F0, $0F, $00)
var
  arr: array[1..Buffer] of byte;
  f: file;
  i, j, n: integer;
begin
  AssignFile(f, FileName);
  Reset(f, 1);
  n := FileSize(f);
  for j := 35 to Counttowrite do //<-- Hier
  begin
    for i := 1 to n div Buffer do
    begin
      BlockWrite(f, FillBuffer[j], Buffer);
    end;
  end;
  CloseFile(f);
  RenameFile(Filename, ExtractFilepath(Filename)+'$000000.tmp');
  DeleteFile(ExtractFilepath(Filename)+'$000000.tmp');
end;
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

Re: 35 Mal überschreiben

  Alt 29. Jul 2004, 18:00
Zitat von HW764:
Ich habe diesen Code, der eine Datei 6 mal überschreibt.
Der Code ist Kot.
Denn BlockWrite ist eine gepufferte Funktion; es ist nicht sicher, dass die Daten jemals alle auf die Platte kommen.
35-faches Überschreiben ist übertrieben; am Besten man füllt die Datei zum Schluss mit
zufälligen Schrottdaten, dann versagt jedes Partial Response Verfahren.

Hier ist mein Gegenvorschlag:
Delphi-Quellcode:
procedure ShredderFile(const filename:string);
const
  Fillchars: array[0..5] of char = (Char($00), Char($FF), Char($00), Char($F0), Char($0F), Char($00));
  BLOCK_SIZE = 8096;
var
   fs : TFileStream;
   buffer : String;
   i, j : Integer;
begin
   fs := TFileStream.Create(filename, fmOpenReadWrite or fmShareExclusive);
   try
      // Datei auf nächste Blockgrösse verlängern, damit der "Slack" überschrieben
      // wird
      fs.Size := ((fs.Size div BLOCK_SIZE) +2) * BLOCK_SIZE;

      // Datei soll mindestens 2 MB gross sein, damit die Schreibcaches der
      // Festplatten überflutet werden
      if fs.Size < 2097152 then
         fs.Size := 2097152;


      for i := 0 to 5 do
      begin
         fs.Position := 0;
         buffer := StringofChar(Fillchars[i], BLOCK_SIZE);

         for j := 1 to fs.Size div BLOCK_SIZE do
         begin
            fs.WriteBuffer(buffer[1], BLOCK_SIZE);
         end;
         FlushFileBuffers(fs.Handle);
      end;

      // wir verarschen den Geheimdienst und schreiben zum Schluss
      // seltsame Schrottdaten
      // wirkliche Zufallsdaten wären besser, aber das reicht doch auch schon
      buffer := 'Terror, Bin Laden, Sprengstoff, Waffen, Plutonium';
      fs.Position := 0;
      for j := 1 to fs.Size div Length(buffer) do
      begin
         fs.WriteBuffer(buffer[1], Length(buffer));
      end;
   finally
      fs.Free;
   end;
end;


procedure ShredderAndDeleteFile(const filename:string);
var
   newname : string;
begin
   // zuerst umbennen, dann später keine Rückschlüsse auf den Dateinamen möglich sind
   newname := ExtractFilepath(Filename)+'$000000.tmp';

   if not RenameFile(Filename, newname) then
      raise Exception.CreateFmt('Can''t rename file %s', [filename]);

   ShredderFile(newname);

   DeleteFile(newname);
end;
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: 35 Mal überschreiben

  Alt 29. Jul 2004, 18:01
Ne, also bissle überlegen solltest du schon:

for j := 35 to Counttowrite do Counttowrite hat den Wert 34.

Somit kann die for-Schleife gar nicht durchlaufen werden.
Du kannst den Code von Spezi1980 1:1 übernehmen.
  Mit Zitat antworten Zitat
HW764
(Gast)

n/a Beiträge
 
#9

Re: 35 Mal überschreiben

  Alt 29. Jul 2004, 18:23
LOL

Delphi-Quellcode:
   // wir verarschen den Geheimdienst und schreiben zum Schluss
      // seltsame Schrottdaten
      // wirkliche Zufallsdaten wären besser, aber das reicht doch auch schon
      buffer := 'Terror, Bin Laden, Sprengstoff, Waffen, Plutonium';
Aber er Code geht supa! Vielen Dank!
  Mit Zitat antworten Zitat
rantanplan99
(Gast)

n/a Beiträge
 
#10

Re: 35 Mal überschreiben

  Alt 29. Jul 2004, 19:10
Verscht ihr den HW764 oder verarscht der uns?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz