Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.67/100: Рейтинг темы: голосов - 100, средняя оценка - 4.67
102 / 87 / 17
Регистрация: 04.05.2011
Сообщений: 1,330
1

Реализация LFSR

31.07.2012, 10:20. Показов 18193. Ответов 30
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вопрос касается реализации LFSR. В "Прикладной криптографии" Шнайера даётся пример реализации LFSR для многочлена: https://www.cyberforum.ru/cgi-bin/latex.cgi?x^{32}+x^7+x^5+x^3+x^2+x+1
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
AnsiString j="";
    static unsigned long ShiftRegister=1;
    for (int i=0;i<30;i++)   {
        ShiftRegister=((
        ((ShiftRegister >> 31)     // 32
        ^(ShiftRegister >> 6)      // 7
        ^(ShiftRegister >> 4)      // 5
        ^(ShiftRegister >> 2)      // 3
        ^(ShiftRegister >> 1)      // 2
        ^(ShiftRegister ))         // 1
        & 0x00000001)
        <<31)|(ShiftRegister >> 1);
         j=j+(ShiftRegister & 0x00000001);
        }
         Form1->Edit3->Text=j;
В j получаю M-последовательность для кодирования.
Пробывал написать для многочлена https://www.cyberforum.ru/cgi-bin/latex.cgi?x^4+x+1 (для проверки). Получаю нужную последовательность.
А как написать для https://www.cyberforum.ru/cgi-bin/latex.cgi?x^{29}+x^2+1?
Мой вариант выдаёт одни нули:
C
1
2
3
4
5
ShiftRegister=((
       ((ShiftRegister >> 28)     
        ^(ShiftRegister >> 1) )    
        & 0x00000001)
        <<28)|(ShiftRegister >> 1);
1
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.07.2012, 10:20
Ответы с готовыми решениями:

Lfsr
В википедии приведен пример реализации lfsr: int LFSR_Fibonacci (void) { static unsigned long...

Генератор на регистре сдвига (LFSR). Оптимизация
Всем доброго времени суток. Столкнулся с проблемой при программной реализации генератора...

Реализация ЛС
Добрый день, нужна помощь. Начинаю делать Личные сообщения. Стразу возникает вопрос. Как достать...

Реализация if-else
Привет всем, задачка вроде не сложная, но никак не могу к ней подступиться. Пишу скрипт. В скрипт...

30
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
11.04.2016, 18:49 21
Author24 — интернет-сервис помощи студентам
Для кода из #10
0 0 0 1
складываются два правых, сумма записывается слева. правый символ извлекается из регистра сдвига и выдаётся как выход.
static позволяет сохранить переменную до следующего вызова функции.
0
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
11.04.2016, 19:03 22
C++
1
static unsigned long S = 1;
А для многочлена x^7+x^5+x^3+1 в этом случае каково будет начальное состояние регистра?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
11.04.2016, 19:04 23
любое можно от 1 до 27–1, т. е. от 1 до 127.
0
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
11.04.2016, 19:09 24
если задать начальное состояние так:
C++
1
static unsigned long S = 1;
, то как будут заполнены 7 ячеек?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
11.04.2016, 19:10 25
Ну двоичное представление числа 1, то есть 0 0 0 0 0 0 1
0
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
11.04.2016, 19:15 26
то есть правильно ли я понимаю, что при любом многочлене 7-ой степени, если
C++
1
static unsigned long S = 1;
, то первые 7 значений псевдослучайной последовательности: 1 0 0 0 0 0 0?
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
11.04.2016, 19:17 27
Да.
0
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
11.04.2016, 20:14 28
у меня только для одного многочлена из 3 получается такое начало последовательности при S=1. (для x^7+x+1). для x^7+x^5+x^3+1 первые 7 значений: 1001011; для x^7+x^6+x^5+x^2+1: 1101010.
с чем это может быть связано?

Добавлено через 1 минуту
и кстати для x^7+x+1 в обратной последовательности: 0000001

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
    for (int i = 0; i < w; i++){
        uL ^= (ShiftRegister >> ptr[i]);
    }
    uL &= 1;
    uL <<= N-1;
    uL |= (ShiftRegister >> 1);
    ShiftRegister = uL;
    return ShiftRegister & 1;  
}
Добавлено через 58 секунд
ptr[i]-массив значений на которые надо сдвинуть ячейки регистра
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
11.04.2016, 20:43 29
uL перед циклом обнуляется?
0
1 / 1 / 0
Регистрация: 05.11.2012
Сообщений: 33
11.04.2016, 21:08 30
да.
0
Эксперт С++
2381 / 1665 / 279
Регистрация: 29.05.2011
Сообщений: 3,399
11.04.2016, 21:15 31
Ну что тут можно сказать по обрывку. Смотрите содержимое ShiftRegister в начале и в конце каждого вызова функции.
0
11.04.2016, 21:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2016, 21:15
Помогаю со студенческими работами здесь

Реализация AND и OR
Данные программы необходимо реализовать на Scheme (диалекте LISP). ВАЖНОЕ УСЛОВИЕ: При...

Реализация
Хочу создать программу Простую (при наживании на кнопку к примеру ок) Создавался бат файл с моими...

Реализация
Кто может помочь с одним моментом в курсовике , курсовик сделан почти весь, но там буквально 5-7...

Реализация на C#
Как в C# работать с WinAPI? Например, я пишу hwnd h = FindWindow(nil,'Безымянный - Блокнот');...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
31
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru