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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2014, 15:16   #1
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию Стеганография

Не выходит из bmp полностью вытащить файл, ошибка в считывании размера файла из bmp
Код:
procedure Find(IFile1: string; SaveDialog1 :TSaveDialog);
var
 IInfo: TImageFileInfo;
 CF, DF: TMemoryStream;
 z, i, bit, x, len: Byte;
 b:array[0..31] of byte;
 a: ArrayBits;
 n, sz: LongInt;
 DFile: string;
begin
  //информация о bmp
  FileFormat(IFile1, IInfo);
  CF:= TMemoryStream.Create;
  DF:= TMemoryStream.Create;
  CF.LoadFromFile(IFile1);
  CF.Position:= IInfo.Offset;
  //собираем массив переводим из дв. в котором размер скрытого файла 
//==================тут ошибка==================
  for n:= 31 downto 0 do
   begin
     CF.Read(z, SizeOf(z));
     if (z and 1) <> 0 then z:= 1
     else z:= 0;
     b[n]:= z;
   end;
//=============================================
  sz:= 0;
  //собираем IFile по битам
  for i:= 31 downto 0 do
   begin
     bit:= b[i];
     if (bit and ( 1 shl 7)) <> 0 then bit:= 1;
     sz:= sz or bit;
     if i <> 0 then sz:= sz shl 1;
   end;
  SetLength(DFile, 0);
  DFile:= '';
  z:= 0;
  //Получаем из FC длину имени
  for n:= 7 downto 0 do
   begin
     CF.Read(z, SizeOf(z));
     if (z and 1) <> 0 then z:= 1
     else z:= 0;
     a[n]:= z;
   end;
  len:= 0;
  //массив из ед. и 0 в байты
  BinToHex(len, a);
  //получаем имя спрятанного файла
  for n:= 1 to len do
   begin
    for i:= 7 downto 0 do
     begin
       CF.Read(z, SizeOf(z));
       if (z and 1) <> 0 then z:= 1
       else z:= 0;
       a[i]:= z;
     end;
    BinToHex(z, a);
    DFile:= DFile + chr(z);
   end;
  //"тело" FD'a
  for i:= 0 to sz - 1 do
   begin
     //считываем 8 бит
     for n:= 7 downto 0 do
      begin
        CF.Read(z, SizeOf(z));
        if (z and 1) <> 0 then z:= 1
        else z:= 0;
        a[n]:= z;
      end;
     //byte->bit
     BinToHex(x, a);
     //файл
     DF.Write(x, SizeOf(x));
   end;
  try
    SaveDialog1.FileName:= 'source.txt';
    //диалог сохранения
    if SaveDialog1.Execute then DFile:= SaveDialog1.FileName;
    //save
    DF.SaveToFile(DFile);
    except MessageBox(0,PAnsiChar('Ошибка при попытке сохранения.'+#13#10+DFile),'X-Date',MB_ICONERROR);
    end;
    CF.Free;
    DF.Free;
    MessageBox(0,'Выполнено!','Готово',MB_ICONINFORMATION);
end;
Taner вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Стеганография andre_07 Общие вопросы C/C++ 0 27.04.2014 20:35
Стеганография Dasha1610 Помощь студентам 2 29.02.2012 14:57
стеганография. Dasha1610 Помощь студентам 3 28.02.2012 21:15
Стеганография Dasha1610 Помощь студентам 3 21.02.2012 19:30
Стеганография Solny6ko YasnoE Фриланс 9 17.01.2011 17:19