шифрование
Из файла читаю блоки данных и вот столкнулся с проблемой:
как блоки данных сложить по модулю 2 с числом?
и % в си-подобных языках
Тут XOR - это "^"
вот я пишу хотя бы
c='a';
printf("%c",c);
c1 = c ^ 59;
printf("\n%c",c1);
c2 = c1 ^ 59;
printf("\n%c",c2); //получили старое значение
Это если с символом - работает, а если массив данных, то как?
Ну так в цикле и поксорь:
Вот и прошу совета, как их сложить
Тут XOR - это "^"
Тьфу блин, очепятался с символом.... % этож взятие остатка деления.
Дело вот в чем. Для шифрования ты генерируешь последовательность случайных чисел. Если длина сообщения n, то и чисел нужно n штук. И каждый символ сложить по модулю 2 со "своим" случайным числом.
Для расшифровки ты должен снова сгенерировать ТАКУЮ ЖЕ последовательность случайных чисел. Повторное сложение по модулю 2 приведет к расшифровке сообщения.
Для получения таких вот последовательностей (псевдо)случайных чисел существуют так называемые регистры сдвига, о них лучше почитать в спец. литературе.
Спасибо за ссылку. Шифрование - очень интересная тема.
Непонятно (а скорее непривычно) было то, что я привык вопсринимать регистр как готовое цифровое устройство (получается, что сдвиговый регистр с известной загруженной в него битовой последовательностью можно назвать конечным автоматом?), а не как часть какого-то алгоритма, но с оглядкой на приведенную цитату все становится ясно.
Спасибо за инфу еще раз :)
Все верно. Если период сдвигового регистра K, то он представляет собой конечный автомат с K состояниями; на каждом такте работы он переходит в новое состояние - порождает новое число.