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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.01.2012, 19:06   #1
riderpro
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 16
По умолчанию Фрагмент программы по стеганографии

Всем привет! С Новым годом!
Есть фрагмент программы по стеганографии. Понимаю я его сумбурною Поэтому хочу задать пару вопросов по содержанию.

Код:
procedure InsertStegography(BMP: TBitmap; Message: string);
var
  i, j  : integer;
  row   :  pByteArray;
  PB    : pByte;
  NextCh: PChar;
  PixSize: integer;
  BytesToGo: integer;
  BitCounter: integer;
begin
  if not Assigned(BMP) then exit;
  Message:=SIGNATURE+Message;
  BytesToGo:=Length(Message)+2; // We get an extra #0 at the end of the string when cast as PChar
  with BMP do begin
    case PixelFormat of
      pf32bit: PixSize:=4;
      pf24bit: PixSize:=3;
      pf16bit: PixSize:=2;
      else
        raise Exception.Create('Cannot encrypt less than 16-bit color bmp''s !');
    end;
    if (Width*Height) div PixSize < BytesTogo then
      raise Exception.CreateFmt('Too long string to encrypt (Max: %d, Actual: %d)', [(Width*Height) div PixSize, BytesToGo]);
    NextCh:=@Message[1]; // Set String pointer to first character
    BitCounter:=0;
    for i:=0 to Height-1 do begin
      Row:=ScanLine[i];
      PB:=@Row[PixSize-1];
      for j:=0 to Width-1 do begin
        PB^:=(PB^ and $FE) // We want the upper 7 bits of the byte to be unchanged
             or ((Ord(NextCh^) shr BitCounter) and 1); // and add an extra 0/1 to store 1/8 of a char value
        if (BitCounter = 7) then begin // We've written a full Char
          inc(NextCh); // Place PChar on next char in data string
          dec(BytesToGo); // dec number of bytes left
          BitCounter:=0; // and reset bit counter (=bit "index")
        end
        else
          inc(BitCounter);
        if BytesToGo = 0 then exit;

        inc(PB, PixSize); // Move BMP buffer pointer
      end;
    end;
  end;
end;


Теперь сами вопросы. В описании написано,что оно меняет один бит красного контейнера

1.Как менять не только R-контейнер,а и оставшиеся GB?
2.Как менять не один бит,а допустим 2 или 3.

Укажите на сами параметры,которые нужно изменить в фрагменте.

Заранее большое спасибо!


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 02.01.2012 в 09:00.
riderpro вне форума Ответить с цитированием
Старый 01.01.2012, 20:58   #2
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

менять только 1 бит... т.к. иначе уже не скрытно будет
в твоем коде меняется не R-контейнер а неразложенный на цвета байт
и синий и зеленый и синезеленый в 16 битном формате если

ах да ты же сам inc(PB, PixSize); вот по красному и прыгает
inc(PB, 1);
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 01.01.2012 в 21:02.
Slym вне форума Ответить с цитированием
Старый 01.01.2012, 21:47   #3
riderpro
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 16
По умолчанию

спасибо!
и всё таки хотелось бы узнать как поменять количество меняемых бит. для наглядности.
riderpro вне форума Ответить с цитированием
Старый 01.01.2012, 21:53   #4
riderpro
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 16
По умолчанию

и возможно ли это преобразовать для файла,а не строки?
riderpro вне форума Ответить с цитированием
Старый 03.01.2012, 19:46   #5
riderpro
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 16
По умолчанию

объясните,пожалуйста,код программы по пунктам
riderpro вне форума Ответить с цитированием
Старый 06.01.2012, 18:48   #6
riderpro
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 16
По умолчанию

ладно,помогите с этим
есть фрагменты,но нужно избавиться от потоков. хочу всё сделать одним так как с потоками не знаком

Код:
//Записываем размер файла который прячем в bmp’шку
for n:=31 downto 0 do
begin
//Читаем байт из файла-контейнера
FIStream.Read(xi,sizeof(xi));
//Если в sz’е бит с номером n равен 1, то устанавливаем 0-ой бит в только что считаном
//байте, ну а если n’ный бит сброшен, то сбрасываем 0-ой бит…
if (sz and (1 shl n))<>0 then xi:=SetBit(xi,0)
else xi:=ResetBit(xi,0);
//Откатываемся на позицию назад, чтоб перезаписать тот бит который мы считали, но
//только теперь с измененным нулевым битом
FIStream.Position:=FIStream.Position-1;
FIStream.Write(xi,sizeof(xi));
end;


//Пишем в bmp’шку само тело файла
//каждый байт разбиваем на биты и записываем
for n:=0 to (sz-1) do
begin
FDStream.Read(xd,sizeof(xd));
HexToBin(xd,BAr);
for i:=7 downto 0 do
begin
FIStream.Read(xi,sizeof(xi));
if BAr[i]=1 then xi:=SetBit(xi,0);
if BAr[i]=0 then xi:=ResetBit(xi,0);
FIStream.Position:=FIStream.Position-1;
FIStream.Write(xi,sizeof(xi));
end;
end;
SetLength(FName,0);
если что,то взято отсюда
http://www.abc-it.lv/index.php/id/985

заранее спасибо
riderpro вне форума Ответить с цитированием
Старый 08.01.2012, 01:08   #7
riderpro
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 16
По умолчанию

прошу,ответьте хотя бы как поменять количество изменяемых бит!!!
riderpro вне форума Ответить с цитированием
Старый 08.01.2012, 07:58   #8
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Стеганография применима только к изображениям. Любой другой файл - бинарная структура с четким следованием битов. Измени хотя бы один - файл будет поврежден. Также стеганография может применяться в различных видеофайлах, где изменение бита(ов) в кажом пикселе каждого кадра несущественно.

Как поменять количество изменяемых бит: максимум только 3 бита, и только младший на каждый цветовой канал rgb. Берете байт из ScanLine[i], он в коде PB^. И с помощью побитовых операций записываете бит вашей информации в 8й бит этого байта. Процесс извлечения данных с точностью наоборот. В общем-то все.
Ваш код работает только с красным каналом, и то, как-то сложно и замысловато.
"ковыряю изнутри" (с)

Последний раз редактировалось 3D Hunter; 08.01.2012 в 08:28.
3D Hunter вне форума Ответить с цитированием
Старый 08.01.2012, 13:28   #9
riderpro
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 16
По умолчанию

Цитата:
Сообщение от 3D Hunter Посмотреть сообщение
Стеганография применима только к изображениям. Любой другой файл - бинарная структура с четким следованием битов. Измени хотя бы один - файл будет поврежден. Также стеганография может применяться в различных видеофайлах, где изменение бита(ов) в кажом пикселе каждого кадра
Вы не поняли, я имел ввиду как записывать не текст, а файл внутрь BMP
Как записать я примерно понимаю, но как при считывании определить границы файла, то есть до какого момента считать?
riderpro вне форума Ответить с цитированием
Старый 08.01.2012, 18:01   #10
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Это вы меня не поняли. Я и имел в виду, что файлы можно записывать с помощью стеганографии обычно в файлы-изображения или видеофайлы.
Границы? Например так: узнаете размер вашего файла, который хотите спрятать. Это будет число 4 байт, например Integer. Это 32 бита. Пишите в файл-контейнер их первыми, а потом уже и сам файл. При считывании сначала берете эти 32 бита, и организуете цикл от 1 до "считанный размер файла".
"ковыряю изнутри" (с)
3D Hunter вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как записать фрагмент программы,чтобы после 3 введёных неправильно паролей она закрывалась? Draiv93 Microsoft Office Access 2 23.04.2011 13:08
Нужен фрагмент программы за деньги Alextuter Фриланс 1 02.04.2011 17:45
Алгоритмы КРИПТОГРАФИИ, СТЕГАНОГРАФИИ Dima_Dima Общие вопросы Delphi 3 31.05.2010 19:13
скрипты для стеганографии Ilitan Помощь студентам 1 21.03.2010 01:06