...
type
TOverWriteData =
array[0..2]
of Byte;
const
OverWriteData:
array[0..34]
of TOverWriteData =
(($00, $00, $00), ($00, $00, $00), ($00, $00, $00), ($00, $00, $00),
//Random data
($55, $55, $55), ($AA, $AA, $AA), ($92, $49, $24),
($49, $24, $92), ($24, $92, $49), ($00, $00, $00),
($11, $11, $11), ($22, $22, $22), ($33, $33, $33),
($44, $44, $44), ($55, $55, $55), ($66, $66, $66),
($77, $77, $77), ($88, $88, $88), ($99, $99, $99),
($AA, $AA, $AA), ($BB, $BB, $BB), ($
CC, $
CC, $
CC),
($DD, $DD, $DD), ($EE, $EE, $EE), ($FF, $FF, $FF),
($92, $49, $24), ($49, $24, $92), ($24, $92, $49),
($6D, $B6, $
DB), ($B6, $
DB, $6D), ($
DB, $6D, $B6),
($00, $00, $00), ($00, $00, $00), ($00, $00, $00), ($00, $00, $00));
//Random Data
procedure FillBuffer(
var Buffer:
array of TOverWriteData; Data: TOverWriteData);
var i: integer;
begin
for i:= 0
to High(Buffer)
do begin
Buffer[i]:= Data;
end;
end;
procedure RandomizeBuffer(
var Buffer:
array of TOverWriteData);
var i: integer;
begin
Randomize;
for i:= 0
to High(Buffer)
do begin
Buffer[i][0]:= ord(Trunc(Random(255)));
Buffer[i][1]:= ord(Trunc(Random(255)));
Buffer[i][2]:= ord(Trunc(Random(255)));
end;
end;
function Shredder(aFilename:
string): Boolean;
var nSize: INT64;
hFile, i: Integer;
BytesWritten: Integer;
TotalBytes: INT64;
BytesToWrite: INT64;
Buffer:
array[0..1365]
of TOverWriteData;
begin
result:= False;
hFile:= FileOpen(aFilename, fmOpenWrite
or fmShareExclusive);
if hFile > 0
then begin
nSize:= FileSeek(hFile, 0, 2);
if nSize = 0
then begin
FileClose(hFile);
result:= SysUtils.DeleteFile(aFilename);
exit;
end;
for i:= 0
to High(OverWriteData)
do begin
if (i
in [0..3,31..34])
then //Die ersten und letzten 4 Durchläufe mit Zufallsdaten überschreiben
RandomizeBuffer(Buffer)
else
FillBuffer(Buffer, OverWriteData[i]);
TotalBytes:= nSize;
if (TotalBytes - sizeof(Buffer)) <= 0
then
BytesToWrite:= TotalBytes
else
BytesToWrite:= sizeof(Buffer);
FileSeek(hFile, 0, 0);
repeat
BytesWritten:= FileWrite(hFile, Buffer, BytesToWrite);
Dec(TotalBytes, BytesWritten);
if (TotalBytes - sizeof(Buffer)) <= 0
then
BytesToWrite:= TotalBytes
else
BytesToWrite:= sizeof(Buffer);
until
TotalBytes <= 0;
end;
FileClose(hFile);
result:= SysUtils.DeleteFile(aFilename);
end;
end;