Перейти к содержанию
    

Упростить шифрование

по открытому каналу передаются данные (3 байт) Экспериментальным путем установлен алгоритм шифрования.

 

XOR Биты

628000 <- 800000

314000 <- 400000

18a000 <- 200000

0c5000 <- 100000

062800 <- 080000

031400 <- 040000

018a00 <- 020000

00c500 <- 010000

006280 <- 008000

003140 <- 004000

0018a0 <- 002000

000c50 <- 001000

000628 <- 000800

000314 <- 000400

00018a <- 000200

0000c5 <- 000100

000062 <- 000080

000031 <- 000040

000018 <- 000020

00000c <- 000010

000006 <- 000008

000003 <- 000004

000001 <- 000002

000000 <- 000001

 

Если в последовательности встречается единица, результирующие 3 байта ксорятся с маской, которая потом сдвигается вправо.

например последовательность 111111 зашифруется в 0C9999

 

Маски, участвующие в XOR:

0c5000

00c500

000c50

0000c5

00000c

000000

--------

0C9999

 

как выполнить обратное преобразование ? т.е. расшифровать 0C9999 -> 111111

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Начало передаваемых данных как-то обозначено? Состояние канала, маркерная последовательность? Я на "скрэмблер" намекаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похоже на полиномиальное деление, согласен с предыдущим оратором.

 

Надо подобрать коэффициенты полинома (по-русски многочлена) и его степень (разрядность LFSR).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Похожая, кстати, тема с PLL LPC43xx/LPC18xx. Там коэффициенты сделаны через псевдослучайную последовательность. Полиномы указаны. И как-то геморно их расчитывать по методу из юзер мануала: итеративно в сторону максимума. Т.к. обычно коэффициенты маленькие. Очевидное упрощение: направить цикл в сторону минимума, к тройке. Т.к. коэф. 1 и 2 задаются специфически. Но всё-равно итеративный алгоритм. Было бы лучше иметь мгновенный, без итераций. Интересно, он существует?

Изменено пользователем GetSmart

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Некропост, конечно, но вдруг кому понадобится:

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

 

Как происходит деление?

 

полином 011000101000 =  0x628

00001100100110011001 = 0х0C9999
011000101000 - не делится => 0
-------------------
0000110010011
011000101000 - не делится => 0
------------------
00001100100110
 011000101000 - не делится => 0
------------------
000011001001100
  011000101000 - опа, делится => 1, делаем xor
-----------------
0000000011001001 <- добавляем следующий бит из исходного числа
   011000101000 - не делится => 0
00000000110010011
    011000101000 - не делится => 0
000000001100100110
     011000101000 - не делится => 0
0000000011001001100
      011000101000 - опа, делится => 1, делаем xor
-----------------
00000000000011001001
       011000101000 - не делится => 0
-----------------
00000000000011001001 0 <- исходное число кончилось, добавляем нули
        01100010100 0 - не делится => 0
-----------------
00000000000011001001 00
         0110001010 00 - не делится => 0
-----------------
00000000000011001001 000
          011000101 000 - опа, делится => 1, делаем xor
-----------------
00000000000000001100 0000
           01100010 0000 - не делится => 0
-----------------
00000000000000001100 00000
            0110001 00000 - не делится => 0
-----------------
00000000000000001100 000000
             011000 000000 - не делится => 0
-----------------
00000000000000001100 0000000
              01100 0000000 - делится => 1
-----------------
0
еще 4 разряда будут нули
[[

 

записываем результат сверху вниз - 00010001000100010000 = 0х111110

 

последняя единица потерялась, потому что маска, ссответствующая этому биту - 0, и не влияет на результат

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...