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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2012, 16:08   #1
Dasha1610
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 24
Восклицание Стеганография (сообщение спрятать в текстовом файле)

Есть текст и в нем надо скрыть некоторую фразу(ABC), состоящую из букв. Буквы этой фразы представляются как байты. Эти байты надо разбить на биты.
Текст, в котором будет прятаться сообщение, должен иметь много строчек (как стихотворение). Мы должны разбить скрываемый текст на биты. И если очередной бит скрываемой информации равен единице, то в конец очередной строки текста-контейнера дописываем пробел. Если же бит равен нулю, то в конец строки не пишем пробел.
После шифрования, шифровку надо будет обратно раскодировать.

что это вообще такое и как эту программу написать в паскале?((
Dasha1610 вне форума Ответить с цитированием
Старый 20.02.2012, 11:31   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

это несложно. только учтите, что для кодирования одной буквы текста (допустим, что один символ занимает 1 байт) нужно 8 бит -> 8 строчек в текстовом файле.
(для кодирования фразы из 3-х символов в исходном файле должно быть 24 строки и т.д.)

что у Вас конкретно не получается?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.02.2012, 11:37   #3
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

И не забудьте, что в тексте-контейнере изначально не должно быть пробелов в конце слова, иначе декодирование может быть ошибочным.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 20.02.2012, 14:05   #4
ImmortalAlexSan
Участник клуба
 
Аватар для ImmortalAlexSan
 
Регистрация: 13.01.2009
Сообщений: 1,353
По умолчанию

И это называется не "стенография", а "стеганография" -Совсем разные понятия
"Тебе то может на меня и насрать, но твои глаза меня обожают!"
ImmortalAlexSan вне форума Ответить с цитированием
Старый 20.02.2012, 14:22   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от ImmortalAlexSan
И это называется не "стенография", а "стеганография" -Совсем разные понятия
ну разумеется!

я подправил название темы.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 20.02.2012, 15:07   #6
Dasha1610
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 24
По умолчанию

блин я даже не правильно написала название. капец)

Цитата:
что у Вас конкретно не получается?
я вообще не предстваляю как писать программу. то есть мы это на паре вообще не делали мне просто дали вот текст с заданием и все((
знаю только то что нужно создать файл .txt с текстом(где много строчек=стих) и потом как то его вызывать через паскаль :D
Dasha1610 вне форума Ответить с цитированием
Старый 20.02.2012, 15:42   #7
Вадим Мошев

Старожил
 
Аватар для Вадим Мошев
 
Регистрация: 12.11.2010
Сообщений: 8,568
По умолчанию

Цитата:
Сообщение от DiemonStar Посмотреть сообщение
И не забудьте, что в тексте-контейнере изначально не должно быть пробелов в конце слова, иначе декодирование может быть ошибочным.
Ну, если чуть подумать, то может быть всё хорошо, например перед кодированием запоминать число пробелов в конце строки, при декодировании этой информацией пользоваться...
Вадим Мошев вне форума Ответить с цитированием
Старый 20.02.2012, 15:52   #8
Dasha1610
Пользователь
 
Регистрация: 19.02.2012
Сообщений: 24
По умолчанию

это канечно все очень здорово.но я вот не знаю как зашифровать даже как этот пробел дописывать...а...жэсть...пожалуйста сделайтее..я даже заплатить уже готова.(
Dasha1610 вне форума Ответить с цитированием
Старый 20.02.2012, 16:37   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Шифруется примерно такой процедурой:
Код:
procedure Encode(S: String);
var T1 : Text; 
     I, J : Integer;
begin
   assign(T1, "text.txt");
   assign(T2, "code.txt");
   reset(T1);rewrite(T2);
   for I := 1 to Length(S)*8 do
     if not Eof(T1) then
       begin
          readln(T1, S1);
          while S1[lengh(S1)] = " " do
            delete(S1, lengh(S1), 1);
          J :=  1 shl (I mod 8);
          if ord(S[I div 8]) and J <>  0 then
            S1 := S1 + ' ';
          writeln(T2,S1);
       end
     else
       begin 
          break;
          writeln("Small input file");
       end;
   close(T1);close(T2);
end;
А расшифровывается - такой:

Код:
procedure Decode(var S: String);
var T1, T2 : Text; 
     I, J : Integer;
begin
   assign(T1, "code.txt");
   reset(T1);
   J := 0; I := 0; S := "";
   if not Eof(T1) then
     begin
        readln(T1, S1);
        if S1[Length(S1)] = " " then
          J :=  J shr 1 + 128
         else
          J := J shr 1;
        inc(I);
        If I mod 8 = 0 then
          begin
             S := S + chr(J);
             J := 0;
          end; 
     end;
   close(T1);
end;
з.ы. код не проверял - по-памяти наваял, так что его нужно отлаживать)
Правильно поставленная задача - три четверти решения.

Последний раз редактировалось DiemonStar; 20.02.2012 в 16:55.
DiemonStar вне форума Ответить с цитированием
Старый 20.02.2012, 17:07   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, тогда и я свой пример кода кину...

чтобы был выбор...

полностью исходники + программа в архиве.

ну и исходники продублирую в тексте сообщения:
Код:
program co_dec;
const
  fNameIn = 'stihi.txt'; {имя файл из которого будет браться отвлекающая информация}
  fNameOut = 'stihi_co.txt'; {имя файл в который будет сохраняться закодированная информация}
var
  fIn, fOut : text;
  i, j, cnt : integer;
  OneSymbol : byte;
  sIn, s, sOne : string;
  choice : integer;
begin
  WriteLn('Стенография. Программа кодирования-декодирования. v1.0 (c) 2012');
  WriteLn;

  Assign(fIn, fNameIn);
  Assign(fOut, fNameOut);

  repeat
    WriteLn('Введите, что Вы хотите сделать (число): 0-выйти из программы, 1-кодировать сообщение, 2-декодировать.');
    Readln(choice);
  until (choice>=0) and (choice<=2);

  case choice of
    0: WriteLn('Окончание работы по запросу оператора.');
    1: begin
          WriteLn('Выбран режим кодирования');
          WriteLn('Введите строку для кодирования: ');
          Readln(sIn);
          WriteLn('Обработка файла ', fNameIn,
            ' результат будет помещён в файл ', fNameOut);

          Reset(fIn);
          {сначала проверим, что количество строк в исходном файле достаточно для кодирования}
          cnt:=0;
          while (cnt<=(Length(sIn)*8)) and (Not EOF(fIn)) do
          begin
            Readln(fIn);
            inc(cnt);
          end;
          Close(fIn);

          if cnt<=(Length(sIn)*8) then begin
            WriteLn('Недосточно строк в исходной файле!');
            WriteLn('Обнаружено ',cnt,' строк, а необходимо не менее ', 1+Length(sIn)*8);
          end
          else begin
            Reset(fIn);
            Rewrite(fOut);
            for i:=1 to Length(sIn) do begin
              OneSymbol := ord(sIn[i]);
              for j:=1 to 8 do begin
                ReadLn(fIn, s);

                {удалим все пробелы в конце строки}
                while ( Length(s)>0 ) and (s[Length(s)]=' ') do Delete(s,Length(s),1);

                {если крайний бить = 1 - то добавим в конец строки пробел}
                if (OneSymbol and 1) = 1 then s:= s+' ';

                WriteLn(fOut, s);

                {сдвинем байт символа вправо - чтобы в следующей итерации обработать следующий бит}
                OneSymbol := OneSymbol shr 1;

              end;
            end;
            ReadLn(fIn, s);
            {удалим все пробелы в конце строки}
            while ( Length(s)>0 ) and (s[Length(s)]=' ') do Delete(s,Length(s),1);

            {запишем в конец строки ДВА пробела - это признак окончания стеганотекста в обычном тексте}
            s:= s+'  ';
            WriteLn(fOut, s);

            {теперь просто скопируем всё, что осталось из первого файла во второй - допишем остаток файла}
            while Not EOF(FIn) do begin
              ReadLn(fIn, s);
              WriteLn(fOut, s);
            end;

            {закроем файлы}
            Close(fOut);
            Close(fIn);

            WriteLn('Процесс кодирования успешно завершён.');

          end;



       end;

    2: begin
        WriteLn('Выбран режим декодирования. Декодируется информация из файла ',fNameOut);

        sIn := '';  {строка, куда будем собирать декодированные байты. вначале пустая!}

        Reset(fOut);
        i:= 0;
        OneSymbol := 0;

        while Not EOF(FOut) do begin
           Readln(fOut, s);
           if Length(s)>=2 then
               {если в конце строки ДВА пробела - то всё, конец декодирования.
                обнаружен признак завершения стеганотекста}
             if copy(s,Length(s)-1,2)='  '
               then Break;
           inc(i);
           if (Length(s)>0) and (Copy(s, Length(s),1)=' ') then OneSymbol := OneSymbol or $80;
           if i=8 then begin
             sIn := sIn + chr(OneSymbol);
             i:=0;
             OneSymbol := 0;
           end
           else OneSymbol := OneSymbol shr 1;
        end;
        WriteLn('Обнаруженный скрытый текст: ', sIn);
        WriteLn;

        WriteLn('Процесс декодирования успешно завершён.');

       end;
  end;

  Readln; {ожидание нажатия Enter для закрытия окна программы...}
end.
Вложения
Тип файла: rar stego.rar (10.1 Кб, 126 просмотров)
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск данных в текстовом файле (в самом файле! а не в Memo и не загружая всю инфу из файла в одну строку glagoff Помощь студентам 1 05.05.2010 13:00
изменение в текстовом файле nina_kh Общие вопросы Delphi 3 21.10.2009 16:33
Поиск в текстовом файле! Straiker Паскаль, Turbo Pascal, PascalABC.NET 2 18.01.2009 10:07
Поиск в текстовом файле KaimaS Общие вопросы C/C++ 0 12.11.2008 17:39