реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Упростить шифрование
Santinel
сообщение Nov 14 2015, 09:53
Сообщение #1





Группа: Участник
Сообщений: 13
Регистрация: 29-11-12
Пользователь №: 74 613



по открытому каналу передаются данные (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



Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Nov 14 2015, 10:25
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Начало передаваемых данных как-то обозначено? Состояние канала, маркерная последовательность? Я на "скрэмблер" намекаю.
Go to the top of the page
 
+Quote Post
x736C
сообщение Nov 14 2015, 15:14
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



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

Надо подобрать коэффициенты полинома (по-русски многочлена) и его степень (разрядность LFSR).
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Dec 23 2015, 12:01
Сообщение #4


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



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

Сообщение отредактировал GetSmart - Dec 23 2015, 16:57


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
steel.ne
сообщение Dec 28 2015, 10:11
Сообщение #5





Группа: Новичок
Сообщений: 1
Регистрация: 20-05-15
Пользователь №: 86 780



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

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

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, и не влияет на результат
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th August 2025 - 15:07
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016