Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> длина буквы 3 бита 
V
    Опции темы
Defoult
  Дата 6.10.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.9.2007
Где: Ростов-на-дону

Репутация: нет
Всего: нет



Здравствуйте!
Столкнулся я вот с такой загвоздочкой:
"Моноалфавитная подстановка (в качестве ключа сохраняется алфавит замены,  длина буквы 3 бита)" 
Сам алгоритм шифрования и дешифрования написал на Си работая со строкой
Код

char text[]="abc";

но в char один символ - один байт
что мне нужно сделать, что бы символы стали длиной в 3 бита? И как с ними потом работать?

Это сообщение отредактировал(а) Defoult - 6.10.2007, 23:30
PM MAIL ICQ   Вверх
DjoNIK
Дата 6.10.2007, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



Код

char ch_arr[] = {"abc"};
или
Код

char ch_arr[] = {'a', 'b', 'c'};
или
Код

char *ch_ptr = new char[4];
strcpy( ch_ptr, "abc" );




Это сообщение отредактировал(а) DjoNIK - 6.10.2007, 23:32


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Defoult
Дата 6.10.2007, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.9.2007
Где: Ростов-на-дону

Репутация: нет
Всего: нет



т.е в массиве один символ - 3 бита?
PM MAIL ICQ   Вверх
DjoNIK
Дата 6.10.2007, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 320
Регистрация: 28.9.2006
Где: Питер/Георгиевск

Репутация: 4
Всего: 5



Цитата

т.е в массиве один символ - 3 бита? 

Нет

Добавлено @ 23:44
Цитата

что бы символы стали длиной в 3 бита?

Без асемблера точно не обойтись.

Добавлено @ 23:46
Но ты уверен что тебе нужно именно это?
Сформулируй четко вопрос! Просто я поначалу подумал, что тебе необходимо в одну переменную запихнуть три символа. И привел пример с массивами.

Это сообщение отредактировал(а) DjoNIK - 6.10.2007, 23:57


--------------------
- Плесни-ка мне холодного кипятку.
- Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды?
- Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку.
(разговор петербуржца и москвича)
PM MAIL ICQ   Вверх
Defoult
Дата 6.10.2007, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.9.2007
Где: Ростов-на-дону

Репутация: нет
Всего: нет



Вариант №3    Моноалфавитная подстановка (в качестве ключа сохраняется алфавит замены,  длина буквы 3 бита)
Суть моноалфавитной подстановки заключается в замене символов исходной информации, записанных в одном алфавите, символами из другого алфавита по определенному правилу.
... т.е. иходный алфавит латиница а в алфавите шифрования длина буквы одного символа равна 3 битам...
Я так понимаю...

Это сообщение отредактировал(а) Defoult - 7.10.2007, 00:02
PM MAIL ICQ   Вверх
nickless
Дата 7.10.2007, 00:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гентозавр
****


Профиль
Группа: Участник Клуба
Сообщений: 2976
Регистрация: 29.8.2005
Где: Germany

Репутация: 19
Всего: 181



Цитата(Defoult @  6.10.2007,  22:58 Найти цитируемый пост)
длина буквы одного символа равна 3 битам

Что-то мало для кодирования символов, тремя битами можно только 8 разных букв закодировать...
Текст задания на бумаге написан? Может там 8 а не 3? smile 


--------------------
user posted image

Real men don't use backups, they post their stuff on a public ftp server and let the rest of the world make copies
- Linus Torvalds
PM MAIL   Вверх
Kuvaldis
Дата 7.10.2007, 00:32 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


механик-вредитель
***


Профиль
Группа: Участник Клуба
Сообщений: 1189
Регистрация: 16.6.2006
Где: Минск

Репутация: 11
Всего: 61



Defoult
Здесь не надо ассемблер: хватит и команд сдвига битов
Делать так: 
1. Берешь очередную букву
2. Находишь ее 3-битовый эквивалент
3. Записываешь эти три бита в младшие разряды выходной последовательности
4. сдвигаешь последовательность в выходном буфере на 3 бита влево ( оператор << )

Единственное, я бы взял буфер кратным 3 и 8 (в битовом представлении)
3 - чтобы влазили все шифрованные буквы, без запоминания не влезших разрядов
8 - чтобы получались целые байты, для записи в файл
т.е. удобно буфер взять размером 3 * 8 = 24 бита = 3 байта
обработка у тебя будет по 8 букв
 


--------------------
Помни - когда ты спишь, враг не дремлет
Спи чаще и дольше, изматывай врага бессоницей
PM MAIL ICQ   Вверх
archimed7592
Дата 7.10.2007, 09:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(DjoNIK @  6.10.2007,  23:43 Найти цитируемый пост)
Без асемблера точно не обойтись.

Я пацталом smile.


Цитата(nickless @  7.10.2007,  00:25 Найти цитируемый пост)
Что-то мало для кодирования символов, тремя битами можно только 8 разных букв закодировать...
Для начального задания по курсу криптоанализа нормальное себе задание... Вот когда дают полноценные задания(даже для таких элементарных методов) - хрен расшифруешь smile.


Defoult, а в чём проблема просто не позволять букве принимать значение больше 7? Делается очень просто операцией взятия остатка от деления( x &= 8; ).


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
MAKCim
Дата 7.10.2007, 11:28 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



archimed7592
Цитата(archimed7592 @  7.10.2007,  09:51 Найти цитируемый пост)
взятия остатка от деления( x &= 8; ). 

может быть
x &= 7  smile 


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
archimed7592
Дата 7.10.2007, 13:41 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Ну, о требованиях к скорости никаких предпосылок не было, но, тем не менее, лови плюс за свою любовь к асемблеру и к преждевременной оптимизации smile.
Вообще говоря, в преждевременной оптимизации(а в асемблере тем более) нет ничего хорошего, но, видимо тебе ставят настолько критичные к ресурсам задачи, что ты любую строчку кода пытаешься избавить от лишних тактов процессора smile.


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Defoult
Дата 7.10.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.9.2007
Где: Ростов-на-дону

Репутация: нет
Всего: нет



Цитата

2. Находишь ее 3-битовый эквивалент

Это как????

Цитата

а в чём проблема просто не позволять букве принимать значение больше 7?

но ведь мне надо зашифровать 26 символов
PM MAIL ICQ   Вверх
archimed7592
Дата 7.10.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Да хоть миллион символов...
Ну и шифруй себе на здоровье... В чём проблема то?

Если я не забыл что такое моноалфавитная подстановка, то вот тебе пример.
У тебя алфавит 01234567. Нужно заменить на алфавит 76543210.
Код

const char alphabetLength = 8;
const char originalAlphabet[alphabetLength] = {0, 1, 2, 3, 4, 5, 6, 7};
const char chiperAlphabet[alphabetLength] = {7, 6, 5, 4, 3, 2, 1, 0};

const int textLength = 4; // Надо - сделай здесь хоть 26, хоть 126  символов.
const char text[textLength] = {0, 1, 2, 1}; //  Каждый из них должен быть от 0 до 7.
char char chiperText[textLength];
for (int i = 0; i < textLength; ++i)
    chiperText[i] = chiperAlphaber[originalAlphabet[text[i]]];



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Defoult
Дата 7.10.2007, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.9.2007
Где: Ростов-на-дону

Репутация: нет
Всего: нет



это если мы числа шифруем, а мне ведь надо текст на латинице зашифровать...
PM MAIL ICQ   Вверх
archimed7592
Дата 7.10.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Ты понимаешь что весь этот текст должен состоять из букв, которых можно пересчитать по пальцам, ибо у тебя не может быть больше 8-ми различных букв(по условию)?


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
Defoult
Дата 7.10.2007, 21:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 16.9.2007
Где: Ростов-на-дону

Репутация: нет
Всего: нет



Т.е. по условию у меня просто работа с числами???

А что тогда имел ввиду Kuvaldis???
Цитата
Делать так: 
1. Берешь очередную букву
2. Находишь ее 3-битовый эквивалент
3. Записываешь эти три бита в младшие разряды выходной последовательности
4. сдвигаешь последовательность в выходном буфере на 3 бита влево ( оператор << 


Это сообщение отредактировал(а) Defoult - 7.10.2007, 22:06
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1159 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.