Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.07.2012, 09:38   #1
MORPEH
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 45
Вопрос Алгоритм Питера Гутмана

помогите реализовать алгоритм Питера Гутмана для файла. То есть, для уничтожения информации)).
Буду очень признателен

Знаю что надо использовать blockwrite и assign. Но как такое сделать для файла. при том что бы перезапись была такого же размера не знаю

Последний раз редактировалось MORPEH; 10.07.2012 в 09:39. Причина: Дополнение
MORPEH вне форума Ответить с цитированием
Старый 10.07.2012, 10:08   #2
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

Цитата:
Знаю что надо использовать blockwrite и assign
Не обязательно имхо TFilestream подходит лучше с ним работать легче.
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 10.07.2012, 10:22   #3
MORPEH
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 45
По умолчанию

Цитата:
Сообщение от dmitriegorovih Посмотреть сообщение
Не обязательно имхо TFilestream подходит лучше с ним работать легче.
А можно пример, как сделать перезапись такую? Хотя бы первых 5 циклов
MORPEH вне форума Ответить с цитированием
Старый 10.07.2012, 11:04   #4
dmitriegorovih
Ещё не
Форумчанин
 
Аватар для dmitriegorovih
 
Регистрация: 04.01.2010
Сообщений: 517
По умолчанию

ну как-то так
Код:
var
f:TFileStream;
filename:string;
n:int64;
buffer:array [1..1024] of byte;
begin
randomize;
if Opendialog1.Execute then filename:=Opendialog1.FileName;
if fileexists(filename)=true then f:=TFileStream.Create(filename,fmOpenReadWrite)
else f:=TFileStream.Create(filename,fmCreate);
//------------------------------------------------------------------------------
f.Position:=0;
while f.Position<>f.Size do
begin
n:=f.Position;
f.ReadBuffer(buffer,1);
f.Position:=n;
buffer[1]:=random(256); //псевдослучайные числа
f.WriteBuffer(buffer,1);
end;
//------------------------------------------------------------------------------
f.Position:=0;
while f.Position<>f.Size do
begin
n:=f.Position;
f.ReadBuffer(buffer,1);
f.Position:=n;
buffer[1]:=85; // это число 55 в шестнадцатеричной системе;
f.WriteBuffer(buffer,1);
end;
//------------------------------------------------------------------------------
f.Position:=0;
while f.Position<>f.Size do
begin
n:=f.Position;
f.ReadBuffer(buffer,1);
f.Position:=n;
buffer[1]:=170; // это число AA в шестнадцатеричной системе;
f.WriteBuffer(buffer,1);
end;
//------------------------------------------------------------------------------
end;
Воображение важнее, чем знания. (Albert Einstein)
dmitriegorovih вне форума Ответить с цитированием
Старый 10.07.2012, 11:23   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

позволю себе маленькие исправления (просто для красоты! например, зачем нужно сравнивать булевскую функцию с true ?! )
Цитата:
Код:
var
 ..
 buffer:array [1..1] of byte; 

begin
  if Not Opendialog1.Execute then Exit;
 filename:=Opendialog1.FileName;


  if fileexists(filename)
      then f:=TFileStream.Create(filename,fmOpenReadWrite)
      else f:=TFileStream.Create(filename,fmCreate);

....
buffer[1]:=$55; // это число 55 в шестнадцатеричной системе :)

....
buffer[1]:=$AA; // это число AA в шестнадцатеричной системе :)

Последний раз редактировалось Serge_Bliznykov; 10.07.2012 в 11:26.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.07.2012, 11:48   #6
MORPEH
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 45
По умолчанию

Понял. А как в цикле сделать с этим числом: #49 #24 #92 ?

Последний раз редактировалось MORPEH; 10.07.2012 в 13:01.
MORPEH вне форума Ответить с цитированием
Старый 10.07.2012, 13:18   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Код:
f.Position:=0;
while f.Position<>f.Size do
begin
  n:=f.Position;
  f.ReadBuffer(buffer,1);
  f.Position:=n;
  buffer[1]:= Тут НУЖНОЕ число;
  f.WriteBuffer(buffer,1);
p.s. а вообще, я бы крайне рекомендовал вынести цикл перезаписи в отдельную процедуру такого вида:
Код:
procedure WriteByteValueToFile(var f : TFileStream; isRandom : boolean; ByteValue : byte);
var
   n : int64;
   b : byte;
begin
  f.Position:=0;
  if isRandom then  begin
    for i:=1 to f.Size do begin
       b := Random(ByteValue);
       f.WriteBuffer(b, 1);
     end
  end 
  else begin
    b := ByteValue;
    for i:=1 to f.Size do 
        f.WriteBuffer(b, 1);
 end; 
end; {конец процедуры}
тогда программа будет выглядеть примерно так:
Код:
begin
  randomize;
   if Not Opendialog1.Execute then Exit;
   filename:=Opendialog1.FileName;
   try
      if fileexists(filename) 
          then f:=TFileStream.Create(filename,fmOpenReadWrite)
          else f:=TFileStream.Create(filename,fmCreate);
      
      // пишем случайное число от 0 до 255
     WriteByteValueToFile( f, True, 256 );

      // пишем число 0x55
     WriteByteValueToFile( f, False, $55 );

      // пишем число 0xAA
     WriteByteValueToFile( f, False, $AA );

     и т.д.

   finally
      FreeAndNil(f);
   end;

end
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.07.2012, 14:07   #8
MORPEH
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 45
По умолчанию

Не очень понял по 7 циклу.
Он ведь в 7 цикле пишет такие данные: #92 #49 #24 То есть через 3 числа через пробел?
MORPEH вне форума Ответить с цитированием
Старый 10.07.2012, 14:18   #9
Aristarh Dark
Форумчанин
 
Регистрация: 07.08.2007
Сообщений: 154
По умолчанию

Цитата:
Сообщение от MORPEH Посмотреть сообщение
Не очень понял по 7 циклу.
Он ведь в 7 цикле пишет такие данные: #92 #49 #24 То есть через 3 числа через пробел?
Никаких пробелов, пишется 3 байта, затем опять 3 байта, потом снова 3 байта, и так до конца.
Aristarh Dark вне форума Ответить с цитированием
Старый 10.07.2012, 14:21   #10
MORPEH
Пользователь
 
Регистрация: 24.11.2009
Сообщений: 45
По умолчанию

Цитата:
Сообщение от Aristarh Dark Посмотреть сообщение
Никаких пробелов, пишется 3 байта, затем опять 3 байта, потом снова 3 байта, и так до конца.
А как тогда в примере то что выше так же сделать. Что-то не понимаю. Как тогда будет выглядеть?
MORPEH вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Познакомлюсь с гетеросексуалистом из Питера Гвиневра Свободное общение 161 19.04.2012 10:41
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм. iamhated Помощь студентам 1 15.01.2012 16:24
Разработайте алгоритм методом пошаговой детализации и программу, реализующую этот алгоритм iamhated Помощь студентам 1 14.01.2012 16:22
Программисты БД из Питера GRIV Фриланс 8 04.03.2011 16:28
Не желает работать правильно программа из Питера Абеля bullvinkle Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 28.02.2009 11:11