IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Потоковое шифрование данных, C++ Builder 6
18192123
сообщение 16.02.2009 20:26
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Задание состоит в следующем:

Написать программу,
реализующую алгоритм потокового шифрования содержимого
текстового или двоичного файла. Программа должна запрашивать имя
входного и выходного файлов, представление образующего многочлена
и инициализирующее значение. Разрядность РСЛОС должна быть
меньше или равной максимальной разрядности стандартных
целочисленных типов данных (64 бит).

Вот на чём основываюсь (см. прикреплённый документ)..
Как я поняла, основная задача - сгенерировать поток ключей..для этого и применяется РСЛОС (регистр сдвига с линейной обратной связью)..
Есть некоторые вопросы по реализации:
Пусть пользователь ввёл представление образующего многочлена, инициализирующее значение..
Используя эту информацию нужно некоторый n-битный регистр сдвига обинициализировать (и первый вопрос: как это осуществить?? что за инициализирующее значение задавать??)..чтоб в дальнейшем получать новый бит, выполняя XOR над определёнными битами..

Объясните, пожалуйста!


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 24.02.2009 1:12
Сообщение #2


Гость






Цитата
Ведь насколько я поняла из статьи, левый бит является функцией всех остальных..а получается мы его не берём..?
В статье написано, что
Цитата
Новый самый левый бит вычисляется как функция от остальных бит регистра
. Ты об этом? Единственное, что мне приходит в голову - это вот что: возможно надо делать
int LFSR(TMemo *MemoPolinom)
{
__int64 uL = 0;
for (int i = 0; i < MemoPolinom->Lines->Count; i++) {
uL ^= (ShiftRegister >> StrToInt(MemoPolinom->Lines->Strings[i]));
}
uL &= 0x0000000000000001;
// Не вот так, как ты делаешь...
// uL <<= StrToInt(MemoPolinom->Lines->Strings[0]);

// А вот так вот:
uL <<= (sizeof(__int64) * 8) - 1; // или просто 63

uL |= (ShiftRegister >> 1);
ShiftRegister = uL;
return ShiftRegister & 0x0000000000000001;
}
Чувствуешь разницу? То есть, если 31 в изначальной функции - это не первый член полинома, а (размерность unsigned long в битах) - 1, и надо было ВСЕГДА сдвигать на 31, а не только тогда, когда полином начинается с этого числа, то все становится на свои места.
Тогда действительно при сдвиге на sizeof(unsigned long)*8 - 1 бит тот самый правый бит, который получен как функция от всех остальных, станет самым левым. Тогда все сходится с описанием...
 К началу страницы 
+ Ответить 
18192123
сообщение 24.02.2009 2:51
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 920
Пол: Женский
Реальное имя: Марина

Репутация: -  2  +


Цитата(volvo @ 24.02.2009 1:12) *

В статье написано, что..... Ты об этом?
Тогда действительно при сдвиге на sizeof(unsigned long)*8 - 1 бит тот самый правый бит, который получен как функция от всех остальных, станет самым левым. Тогда все сходится с описанием...


да..я об этом..
уж лучше оставлю сдвиг в зависимости от вида полинома...т.е.

uL <<= StrToInt(MemoPolinom->Lines->Strings[0]);


и исходя из этого последний вопрос:

uL |= (ShiftRegister >> 1);


перед этим мы результат XOR передвинули на количество позиций, определяемое разрядностью регистра сдвига... тогда для чего нужно сдвигать прежнее значение SR на 1 вправо (что это нам даст?) и что даёт OR c имеющимся в uL значением? Объясните пожалуйста!

Сообщение отредактировано: 18192123 - 24.02.2009 3:32
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
18192123   Потоковое шифрование данных   16.02.2009 20:26
volvo   Ну, так у тебя основное-то как раз и не написано.....   16.02.2009 22:11
18192123   Спасибо за ссылки! Насколько я поняла, с помо...   16.02.2009 23:26
volvo   Может, проще будет забрать сразу 8 бит регистра сд...   17.02.2009 0:16
18192123   Может, проще будет забрать сразу 8 бит регистра с...   17.02.2009 1:25
volvo   Вот это: unsigned char byte = 0; for(int i = 0; i ...   17.02.2009 1:38
18192123   Читаю символ из файла, потом идёт формирование бай...   17.02.2009 21:02
volvo   1) зачем понадобилось менять LFSR, да еще таким о...   17.02.2009 22:05
18192123   Спасибо за разъяснение!! Но один вопрос......   17.02.2009 22:29
volvo   Да, я упустил одну строчку... Добавил в программу ...   17.02.2009 22:44
18192123   В процессе тестирования появился ещё вопрос.. По и...   17.02.2009 23:04
volvo   Читаешь исходный файл без контроля ошибок. Добавь ...   17.02.2009 23:40
18192123   Большое спасибо!! Теперь хочу добиться т...   18.02.2009 0:37
volvo   У тебя тут 2 ошибки: 1) неравенство НЕстрогое, эле...   18.02.2009 1:31
18192123   Спасибо большое за разъяснение!!   18.02.2009 16:10
18192123   Здравствуйте! У меня вот такой вопрос: с помощ...   21.02.2009 0:25
volvo   Зачем здесь CreateProcess? Можно же открыть средст...   21.02.2009 1:09
18192123   В процессе тестирования наткнулась на ошибки... Ес...   23.02.2009 0:05
volvo   Ну, скорее всего в том, что надо открывать файлы, ...   23.02.2009 2:07
18192123   Ну, скорее всего в том, что надо открывать файлы,...   23.02.2009 11:10
volvo   Проблема в разрядности... unsigned long - это 32 б...   23.02.2009 12:07
18192123   Тогда уж надо использовать int64_t, там по крайн...   23.02.2009 12:26
volvo   Нет, в Билдере этот тип называется __int64... Меня...   23.02.2009 12:50
18192123   Нет, в Билдере этот тип называется __int64... Мен...   23.02.2009 13:54
volvo   Стоп, стоп... Если ты используешь __int64, то разр...   23.02.2009 14:08
18192123   Стоп, стоп... Если ты используешь __int64, то раз...   23.02.2009 20:57
volvo   По алгоритму так. Все дело - в том, что первый ...   23.02.2009 21:16
18192123   первый & используется в процессе составления ...   23.02.2009 21:28
volvo   Так... Это, похоже, неправильная функция. Правильн...   23.02.2009 22:28
18192123   // Сдвигаем этот бит вправо на _сколько нужно_ ...   23.02.2009 23:08
18192123   // И возвращаем последний бит этого нового SR к...   23.02.2009 23:29
18192123   int LFSR(TMemo *MemoPolinom) { // Оставляем толь...   24.02.2009 0:22
volvo   Влево, влево надо сдвигать... Код правильный, в ко...   23.02.2009 23:26
volvo   Это будет младший бит (LSB), почему левый? Ясно же...   23.02.2009 23:34
volvo   В статье написано, что . Ты об этом? Единственное,...   24.02.2009 1:12
18192123   В статье написано, что..... Ты об этом? Тогда дей...   24.02.2009 2:51
volvo   Нет уж, ты все-таки сделай так, как надо, а не так...   24.02.2009 9:46


 Ответить  Открыть новую тему 
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 13:06
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"