Santinel 0 14 ноября, 2015 Опубликовано 14 ноября, 2015 · Жалоба по открытому каналу передаются данные (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 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GenaSPB 11 14 ноября, 2015 Опубликовано 14 ноября, 2015 · Жалоба Начало передаваемых данных как-то обозначено? Состояние канала, маркерная последовательность? Я на "скрэмблер" намекаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
x736C 0 14 ноября, 2015 Опубликовано 14 ноября, 2015 · Жалоба Похоже на полиномиальное деление, согласен с предыдущим оратором. Надо подобрать коэффициенты полинома (по-русски многочлена) и его степень (разрядность LFSR). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GetSmart 0 23 декабря, 2015 Опубликовано 23 декабря, 2015 (изменено) · Жалоба Похожая, кстати, тема с PLL LPC43xx/LPC18xx. Там коэффициенты сделаны через псевдослучайную последовательность. Полиномы указаны. И как-то геморно их расчитывать по методу из юзер мануала: итеративно в сторону максимума. Т.к. обычно коэффициенты маленькие. Очевидное упрощение: направить цикл в сторону минимума, к тройке. Т.к. коэф. 1 и 2 задаются специфически. Но всё-равно итеративный алгоритм. Было бы лучше иметь мгновенный, без итераций. Интересно, он существует? Изменено 23 декабря, 2015 пользователем GetSmart Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
steel.ne 0 28 декабря, 2015 Опубликовано 28 декабря, 2015 · Жалоба Некропост, конечно, но вдруг кому понадобится: Раз используется одна и та же маска, только со сдвигом, то надо ее также обратно сдвигать. Правильно отметили, что это деление полиномов. Как происходит деление? полином 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, и не влияет на результат Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться