Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> алгоритм дешифровки надо сделать, на основе алгоритма шифровки 
V
    Опции темы
eNecro
Дата 2.2.2010, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.2.2008

Репутация: нет
Всего: нет



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

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
  Form1: TForm1;
  b,key,hi_a,low_a,a,hi_b,low_b,bit1,bit2: byte;
  f,f1,f2: file of byte;
  i,k: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                                                           {1}
     begin
       read(f,b);
       a:=0; hi_a:=0;low_a:=0;i:=0;

       ///  hi_b:=not key;
       {hi_a:=(b shr 4)and(00001111)+ ( not(key))and(00001111);
       hi_a:=(hi_a shl 4)and (11110000);
       low_a:=(b)and(00001111)+(not (key))and(00001111);
       low_a:=(low_a)and(00001111);
        }
        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-trunc(i/256);///(i mod 256);
      inc(i);
      write(f1,b);
    ///  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;
      bit1:=bit1 shl 6;
      a:=bit1+a;
      write(f1,a);
    end;


   closefile(f1);
   closefile(f);

end;



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

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

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

сам файлик в аттаче


Это сообщение отредактировал(а) eNecro - 3.2.2010, 09:35

Присоединённый файл ( Кол-во скачиваний: 2 )
Присоединённый файл  5.rar 0,13 Kb
PM MAIL   Вверх
eNecro
Дата 3.2.2010, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.2.2008

Репутация: нет
Всего: нет



все таки действительно 3-я часть кодировки (здесь 1-й блок) не работает. В бинарном вычитании косяк.

но, что больше всего меня сегодня убило - не работает mod!
например:

(i=0) mod 256   = 0
(i=1) mod 256   = 1
(i=2) mod 256   = 2

Это понять я не в состоянии...
PM MAIL   Вверх
ksili
Дата 3.2.2010, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2069
Регистрация: 3.11.2005
Где: Красноярск

Репутация: нет
Всего: 17



Цитата(eNecro @  3.2.2010,  13:39 Найти цитируемый пост)
но, что больше всего меня сегодня убило - не работает mod!например:
(i=0) mod 256   = 0
(i=1) mod 256   = 1
(i=2) mod 256   = 2

Это понять я не в состоянии...

А как по-твоему должно было быть?


--------------------
Ничто так не развивает аналитическое мышление, как отладка сложной программы без возможности пошагового выполнения (с)
PM MAIL   Вверх
eNecro
Дата 3.2.2010, 10:43 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.2.2008

Репутация: нет
Всего: нет



а почему когда делимое меньше делителя, mod выдает делимое.
Например,
2 mod 5 даст два, почему это правильно с математической точки зрения?
2/5=0,4 -  mod для подобных чисел вообще применим?
PM MAIL   Вверх
kogemrka
Дата 3.2.2010, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 8.1.2010

Репутация: нет
Всего: нет



mod - операция получения остатка от деления
2 mod 5 = 2. Всё логично. 
Раздели 2 на пять. Результат деления - ноль. Остаток от деления: 2
PM MAIL   Вверх
eNecro
Дата 4.2.2010, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 12.2.2008

Репутация: нет
Всего: нет



блин, то ли в школе плохо учился, то ли что smile
буду знать, спасибо.

алгоритм собрал, тему можно закрыть
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.