Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Упростить шифрование
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Математика и Физика
Santinel
по открытому каналу передаются данные (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



Genadi Zawidowski
Начало передаваемых данных как-то обозначено? Состояние канала, маркерная последовательность? Я на "скрэмблер" намекаю.
x736C
Похоже на полиномиальное деление, согласен с предыдущим оратором.

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

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

CODE

полином 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, и не влияет на результат
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.