Реализация LFSR - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Вопрос касается реализации LFSR. В "Прикладной криптографии" Шнайера даётся пример реализации LFSR для многочлена:
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-последовательность для кодирования. Пробывал написать для многочлена (для проверки). Получаю нужную последовательность. А как написать для ? Мой вариант выдаёт одни нули:
ShiftRegister=((
       ((ShiftRegister >> 28)     
        ^(ShiftRegister >> 1) )    
        & 0x00000001)
        <<28)|(ShiftRegister >> 1);

Решение задачи: «Реализация LFSR»

textual
Листинг программы
    void GetAllStates()
    {
        //для [5, 3, 0]
        static unsigned long ShiftReg = 1;
        for (int i=0; i<31; i++)
        {
            ShiftReg = ((( (ShiftReg>>4)^(ShiftReg>>2)^ShiftReg) & 1) << 4 ) | (ShiftReg>>1);
            AllStates.push_back(ShiftReg & 1);
        } 
 
    }

Объяснение кода листинга программы

  1. В данной функции реализована генерация всех состояний регистра сдвига с использованием LFSR (Linear Feedback Shift Register).
  2. Переменная ShiftReg инициализируется значением 1.
  3. В цикле for с переменной i от 0 до 30 происходит генерации всех состояний регистра сдвига.
  4. В каждой итерации цикла происходит обновление значения регистра сдвига в соответствии с алгоритмом LFSR.
  5. Значение регистра сдвига ShiftReg уменьшается на 1 бит при каждой итерации цикла.
  6. В каждой итерации цикла в вектор AllStates добавляется значение одного бита регистра сдвига.
  7. После завершения цикла все состояния регистра сдвига будут присутствовать в векторе AllStates.

Оцени полезность:

15   голосов , оценка 4.267 из 5
Похожие ответы