![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Задание состоит в следующем:
Написать программу, реализующую алгоритм потокового шифрования содержимого текстового или двоичного файла. Программа должна запрашивать имя входного и выходного файлов, представление образующего многочлена и инициализирующее значение. Разрядность РСЛОС должна быть меньше или равной максимальной разрядности стандартных целочисленных типов данных (64 бит). Вот на чём основываюсь (см. прикреплённый документ).. Как я поняла, основная задача - сгенерировать поток ключей..для этого и применяется РСЛОС (регистр сдвига с линейной обратной связью).. Есть некоторые вопросы по реализации: Пусть пользователь ввёл представление образующего многочлена, инициализирующее значение.. Используя эту информацию нужно некоторый n-битный регистр сдвига обинициализировать (и первый вопрос: как это осуществить?? что за инициализирующее значение задавать??)..чтоб в дальнейшем получать новый бит, выполняя XOR над определёнными битами.. Объясните, пожалуйста! Эскизы прикрепленных изображений ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата уж лучше оставлю сдвиг в зависимости от вида полинома. Нет уж, ты все-таки сделай так, как надо, а не так, как тебе хочется. А надо - именно сдвигать на sizeof(ShiftRegister)*8 - 1, вот тебе пример:Wiki: Linear feedback shift register Видишь, там напрочь нет 15 в полиноме (нет сдвига вправо на 15 бит), однако, чтобы получить тот самый единственный бит САМЫМ ЛЕВЫМ, производится сдвиг влево на 15 (при 16-битном размере регистра). Цитата перед этим мы результат XOR передвинули на количество позиций, определяемое разрядностью регистра сдвига... Ну ты уж будь последовательна... Только что ты сказала, что тебе плевать на разрядность регистра, тебе удобнее передвигать результат XOR-ов в зависимости от первого элемента полинома... Так что все-таки ты решила?Цитата тогда для чего нужно сдвигать прежнее значение SR на 1 вправо (что это нам даст?) и что даёт OR c имеющимся в uL значением? Если принять, что сдвиг производится в зависимости от разрядности, то... Смотри: Допустим, имеем 8-ми разрядный регистр (для простоты, принцип остается тем же для любой разрядности). Тогда:SR = 00101011 (какое-то значение регистра) Допустим, после преобразований и отсечения всех старших бит, получили uL = 00000001... Теперь сдвигаем это значение так, чтобы выделенный бит был старшим: uL = 10000000. И "складываем" (OR) с предыдущим значением SR, сдвинутым на 1 позицию вправо (т.е., с 00010101)... Что имеем в результате? 10000000 00010101 -------- 10010101, то есть, старшим битом идет бит, только что вычисленный "как функция от остальных бит регистра", а остальные - просто сдвинутые исходные... А теперь сравни: Цитата Каждый раз, когда должен быть сгенерирован новый бит, все биты регистра сдвигаются на позицию вправо. Новый самый левый бит вычисляется как функция от остальных бит регистра, конкретный вид функции зависит от используемой обратной связи. Выходом регистра сдвига в каждом такте является 1 бит, часто это самый младший бит регистра. |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 13:09 |