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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2013, 21:25   #1
HiredKiller1
 
Регистрация: 23.05.2013
Сообщений: 5
По умолчанию wavstego.pas

Доброго времени суток.
Задание - скрыть в wav файле любой другой файл.
Так как в дельфи не очень силен приступил к поискам в гугле.
Копаясь в гугле нашел интересный клас для себя (в вложении)
может кто навести примеры работы с ним? или любые другие примеры стеганографии в wav


Inject - внедрить (?)
Catch - извлечь (?)
LoadToBA - загрузить (но вот что?? где грузить вав и файл(текст) черт его знает)
SaveToBA - сохранить. (если я правильно понял на выходе должен быть вав файл с текстом)
гружу вав а вот куда текст (?)
Код:
var
dir:string;
begin
GetDir(0, dir);
twav.LoadToBA(dir+'/test.wav');
переменные вообще не задействованы
Код:
 var
    TexFileTMP, TexFile: string;

Последний раз редактировалось HiredKiller1; 24.05.2013 в 16:17.
HiredKiller1 вне форума Ответить с цитированием
Старый 23.05.2013, 22:46   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

...пример работы с классом (функции доработал для универсальности):


Сами модифицированные функции:
Код:
procedure TWFile.LoadToBA (fn: ansistring; textorfile: boolean);
  var
    FS: TFileStream;
  var
    i:  integer;
    d:  byte;

  begin
    if textorfile then begin
     i:= length(fn) * 8 + 48;
     SetLength(BitA, i);
     BitAPos := 0;
     PutWord(Header);
     PutInteger(length(fn));

     for I := 1 to length(fn) do begin
      PutByte(ord(fn[i]));
      end;
     end else begin


    FS := TFileStream.Create(fn, fmOpenRead);
    SetLength(BitA, fs.Size * 8 + 48);
    BitAPos := 0;
    PutWord(Header);
    PutInteger(fs.Size);

    for I := 0 to FS.Size - 1 do
      begin
      FS.Read(d, 1);
      PutByte(d);
      end;

    FS.Free;
  end;
end;


procedure TWFile.SaveToBA (var fn: ansistring; textorfile: boolean);
  var
    FS: TFileStream;
  var
    i, size: integer;
    d:  byte;

  begin
    if textorfile then begin
     fn:= '';
     BitAPos := 16;
     size := GetInteger;

     for I := 0 to size - 1 do begin
      d := GetByte();
      fn:= fn + ansichar(d)
     end;
    end else begin



    FS := TFileStream.Create(fn, fmCreate);
    BitAPos := 16;
    size := GetInteger;

    for I := 0 to size - 1 do
      begin
      d := GetByte();
      FS.Write(d, 1);
      end;

    FS.Free;
    end;
end;
Пример использования:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var t,tt: string;
begin
 sb.Panels[0].Text:= 'Начинаем шифрование...';

 w:= TWFile.Create(0);
 t:= get_file(paramstr(0), 'Выберите исходный WAV');
 if t='' then exit;
 w.LoadWave(t);

 if rg1.ItemIndex=0 then
  w.LoadToBA(memo1.Lines.GetText, true)
 else begin
  tt:= get_file(paramstr(0), 'Выберите текстовый файл для зашифровки');
  if tt='' then exit;
  
  w.LoadToBA(tt, false);
 end;

 w.Inject;
 w.SaveWave('xxx_'+ extractfilename(t));
 w.Free;

 sb.Panels[0].Text:= 'Шифрование выполнено!'
end;

procedure TForm1.Button2Click(Sender: TObject);
var t,tt: string;
begin
 sb.Panels[0].Text:= 'Начинаем дешифровку...';

 w:= TWFile.Create(0);
 t:= get_file(paramstr(0), 'Выберите WAV для расшифровки');
 if t='' then exit;
 w.LoadWave(t);
 w.Catch;

 t:= '';
 if rg2.ItemIndex=0 then begin
  w.SaveToBA(t, true);
  memo2.Lines.SetText(pchar(t));
 end else begin
  t:= get_file(paramstr(0), 'Выберите куда сохранить расшифровку из WAV');
  if t='' then exit;

  w.SaveToBA(t, false);
 end;


 w.Free;
 sb.Panels[0].Text:= 'Дешифрование выполнено!'
end;
Удачи!
Вложения
Тип файла: zip injectaudio.zip (753.0 Кб, 10 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 23.05.2013, 23:22   #3
HiredKiller1
 
Регистрация: 23.05.2013
Сообщений: 5
По умолчанию

Цитата:
Сообщение от raxp Посмотреть сообщение
...пример работы с классом (функции доработал для универсальности)
огромное человеческое Спасибо!
Даже не представляешь как выручил
буду лепить =D
HiredKiller1 вне форума Ответить с цитированием
Старый 23.05.2013, 23:23   #4
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

карма такая, выручать.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Востановить pas и dfm dwp_prof Общие вопросы Delphi 14 29.04.2012 15:52
djlopengl.pas Pein95 Общие вопросы Delphi 2 31.12.2010 02:31
Из *.pas в *.dcu SERG1980 Общие вопросы Delphi 3 14.10.2010 08:17
Массив pas анастасия56 Помощь студентам 3 30.05.2009 13:37