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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.02.2010, 08:18   #1
Necro
Пользователь
 
Аватар для Necro
 
Регистрация: 27.02.2007
Сообщений: 22
Вопрос лаба: алгоритм дешифровки сваять

Вот задание: имеется текстовый файл закодированный по следующему алгоритму

1. Циклический сдвиг влево на два. (b = a << 2)*
2. Сумма с числом, образованным как остаток от деления номера позиции байта на 256. Номер позиции считается с нуля. (b = a + (i mod 256))
3. Сумма младших 4-х разрядов ключа со старшими и младшими 4-я разрядами байта. Перенос из младшей части в старшую не осуществляется. (Hi(b) = Lo(k)+Hi(a), Lo(b) = Lo(k)+ Lo(a))


Ключик неизвестен, надо расшифровать этот файл путем выполнения вышеприведенных действий в обратном порядке.

делаю так:

Код:

var
  b,key,hi_a,low_a,a,hi_b,low_b,bit1,bit2: byte;
  f,f1,f2: file of byte;
  i:integer;


procedure encrypt(key:integer);
begin
   ///key:=1;
   assignfile(f,'5.x');
   reset(f);
   assignfile(f1,'6.x');
   rewrite(f1);
    while not eof(f) do   {3-я часть кодировки}
     begin
       read(f,b);
       a:=0; hi_a:=0;low_a:=0;i:=0;
                          {????????????????}
       hi_a:=(b shr 4)and(00001111)-(key)and(00001111);
       hi_a:=(hi_a shl 4)and (11110000);
       low_a:=(b)and(00001111)-(key)and(00001111);
       low_a:=(low_a)and(00001111);

       a:=hi_a+low_a;
       write(f1,a);
     end;
   closefile(f);
   closefile(f1);

     {2}

   assignfile(f,'6.x');
   reset(f);
   assignfile(f1,'7.x');
   rewrite(f1);
   i:=0;
    while not eof(f) do
    begin
      read(f,b);
      a:=0;
      a:=b-(i mod 256);
      inc(i);
      write(f1,a);
      if i>256 then i:=0;
    end;
   close(f1);
   closefile(f);



   {3}

   assignfile(f,'7.x');
   reset(f);
   assignfile(f1,'8.x');
   rewrite(f1);

    while not eof(f) do
    begin
      a:=0;
      read(f,b);
      bit1:=(00000011)and(b);
      a:= b shr 2;
      a:=bit1+a;
      write(f1,a);
    end;


   closefile(f1);
   closefile(f);

end;
но нифига не работает. Грешу на третью часть кодировки. Не пойму, если перенос из младшей часть в старшую не осуществляется, тогда должна инфа потеряться в некоторых случаях. Как это учесть и обратно декодировать?

еще по первой части, где сдвиг влево: в декодировке сделал сначала с сохранением младших битов, а они там нужны? Сомнения меня пробрали...

Подскажите что неверно делаю...

сам файлик в аттаче
Вложения
Тип файла: rar 5.rar (137 байт, 8 просмотров)

Последний раз редактировалось Necro; 02.02.2010 в 08:20.
Necro вне форума Ответить с цитированием
Старый 03.02.2010, 09:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А ключ то какой?

вообще я так прикинул (крекер из меня плохой но все же)
Как-то так должна расшифровка выглядеть:
Код:
const key=4;
 var f:file of byte;posa,h,l,e,b:byte;
begin
 Assign(f,'5');Reset(f);   posa:=0;
 while not eof(f) do begin
  read(f,b);
  //3.
  e:=key and $0f;
  h:=(b and $f0) shr 4;
  l:=b and $0f;
  h:=h-e;
  l:=l-e;
  e:=h shl 4+l;
  //2.
  h:=posa mod 256;
  e:=e-h;
  //3.
  e:=e shr 2;
  write(chr(e));
  inc(posa);
 end;
 readln;
 close(f);
end.
I'm learning to live...

Последний раз редактировалось Stilet; 03.02.2010 в 10:04.
Stilet вне форума Ответить с цитированием
Старый 04.02.2010, 10:32   #3
Necro
Пользователь
 
Аватар для Necro
 
Регистрация: 27.02.2007
Сообщений: 22
По умолчанию

ключик надо подобрать (0-256).
Примерно такой алгоритм у меня и получился, спасибо

Основная моя ошибка была в неправильном переводе чисел, а, соответствено, и в выделении старших и младших разрядов.
Necro вне форума Ответить с цитированием
Старый 04.02.2010, 10:39   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну разобрался и слава Ктулху )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.02.2010, 17:53   #5
Necro
Пользователь
 
Аватар для Necro
 
Регистрация: 27.02.2007
Сообщений: 22
По умолчанию

ага, тока благодаря ему да паре бубнов и справился
Necro вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Лаба T_I_M_U_N Помощь студентам 1 15.01.2010 09:35
Лаба на C++ Suzukava Фриланс 2 14.09.2009 22:51