![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Defoult |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 16.9.2007 Где: Ростов-на-дону Репутация: нет Всего: нет |
Здравствуйте!
Столкнулся я вот с такой загвоздочкой: "Моноалфавитная подстановка (в качестве ключа сохраняется алфавит замены, длина буквы 3 бита)" Сам алгоритм шифрования и дешифрования написал на Си работая со строкой
но в char один символ - один байт что мне нужно сделать, что бы символы стали длиной в 3 бита? И как с ними потом работать? Это сообщение отредактировал(а) Defoult - 6.10.2007, 23:30 |
|||
|
||||
DjoNIK |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 28.9.2006 Где: Питер/Георгиевск Репутация: 4 Всего: 5 |
Это сообщение отредактировал(а) DjoNIK - 6.10.2007, 23:32 -------------------- - Плесни-ка мне холодного кипятку. - Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды? - Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку. (разговор петербуржца и москвича) |
||||||
|
|||||||
Defoult |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 16.9.2007 Где: Ростов-на-дону Репутация: нет Всего: нет |
т.е в массиве один символ - 3 бита?
|
|||
|
||||
DjoNIK |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 320 Регистрация: 28.9.2006 Где: Питер/Георгиевск Репутация: 4 Всего: 5 |
Нет Добавлено @ 23:44
Без асемблера точно не обойтись. Добавлено @ 23:46 Но ты уверен что тебе нужно именно это? Сформулируй четко вопрос! Просто я поначалу подумал, что тебе необходимо в одну переменную запихнуть три символа. И привел пример с массивами. Это сообщение отредактировал(а) DjoNIK - 6.10.2007, 23:57 -------------------- - Плесни-ка мне холодного кипятку. - Как кипяток может быть холодным?! Ты, верно, хочешь кипяченой воды? - Какая ещё кипяченая вода? Не пудри мне мозги - налейхолодного кипятку. (разговор петербуржца и москвича) |
||||
|
|||||
Defoult |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 16.9.2007 Где: Ростов-на-дону Репутация: нет Всего: нет |
Вариант №3 Моноалфавитная подстановка (в качестве ключа сохраняется алфавит замены, длина буквы 3 бита)
Суть моноалфавитной подстановки заключается в замене символов исходной информации, записанных в одном алфавите, символами из другого алфавита по определенному правилу. ... т.е. иходный алфавит латиница а в алфавите шифрования длина буквы одного символа равна 3 битам... Я так понимаю... Это сообщение отредактировал(а) Defoult - 7.10.2007, 00:02 |
|||
|
||||
nickless |
|
|||
![]() Гентозавр ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2976 Регистрация: 29.8.2005 Где: Germany Репутация: 19 Всего: 181 |
Что-то мало для кодирования символов, тремя битами можно только 8 разных букв закодировать... Текст задания на бумаге написан? Может там 8 а не 3? ![]() -------------------- ![]() 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 |
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 11 Всего: 61 |
Defoult,
Здесь не надо ассемблер: хватит и команд сдвига битов Делать так: 1. Берешь очередную букву 2. Находишь ее 3-битовый эквивалент 3. Записываешь эти три бита в младшие разряды выходной последовательности 4. сдвигаешь последовательность в выходном буфере на 3 бита влево ( оператор << ) Единственное, я бы взял буфер кратным 3 и 8 (в битовом представлении) 3 - чтобы влазили все шифрованные буквы, без запоминания не влезших разрядов 8 - чтобы получались целые байты, для записи в файл т.е. удобно буфер взять размером 3 * 8 = 24 бита = 3 байта обработка у тебя будет по 8 букв -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Я пацталом ![]()
![]() 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 |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 52 Всего: 207 |
archimed7592,
может быть x &= 7 ![]() -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ну, о требованиях к скорости никаких предпосылок не было, но, тем не менее, лови плюс за свою любовь к асемблеру и к преждевременной оптимизации
![]() Вообще говоря, в преждевременной оптимизации(а в асемблере тем более) нет ничего хорошего, но, видимо тебе ставят настолько критичные к ресурсам задачи, что ты любую строчку кода пытаешься избавить от лишних тактов процессора ![]() -------------------- 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 |
|||
|
||||
Defoult |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 16.9.2007 Где: Ростов-на-дону Репутация: нет Всего: нет |
Это как????
но ведь мне надо зашифровать 26 символов |
||||
|
|||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Да хоть миллион символов...
Ну и шифруй себе на здоровье... В чём проблема то? Если я не забыл что такое моноалфавитная подстановка, то вот тебе пример. У тебя алфавит 01234567. Нужно заменить на алфавит 76543210.
-------------------- 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 |
|||
|
||||
Defoult |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 16.9.2007 Где: Ростов-на-дону Репутация: нет Всего: нет |
это если мы числа шифруем, а мне ведь надо текст на латинице зашифровать...
|
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 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 |
|||
|
||||
Defoult |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 16.9.2007 Где: Ростов-на-дону Репутация: нет Всего: нет |
Т.е. по условию у меня просто работа с числами???
А что тогда имел ввиду Kuvaldis???
Это сообщение отредактировал(а) Defoult - 7.10.2007, 22:06 |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Ты условие знаешь? Ты сам понимаешь что нужно сделать? Я давно с криптоанализом дела не имел... Возможно тебе нужно представить весь текст(с произвольным количеством символов в алфавите) в виде потока бит и каждые 3 бита менять по заданной маске... Если так, то тебе нужно что-то, вроде, того, что имел ввиду Kuvaldis. Ты с задачей для начала определись(сформулируй её получше)...
-------------------- 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 |
|||
|
||||
Defoult |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 16.9.2007 Где: Ростов-на-дону Репутация: нет Всего: нет |
![]() ctrl+C ctrl+V )) ошибки быть не может, если тока байты из флешки не вылетают ))) в том-то и проблема...что само задание сложности не предстваляет если работать со строкой, в которой 1 буква - 1 байт, а вот эта небольшая оговорочка о 3 битах ввела меня в великий ступор я просто абстрактно не могу представить.....кака я буду шифровать алфавит, когда у меня в распоряжении всего 3 бита на 1 букву |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Продолжение(об определённом правиле) в студию ![]()
IIRC, в моноалфавитной подстановке исходный алфавит имеет такую же мощность, как и целевой. -------------------- 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 |
|||
|
||||
Defoult |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 16.9.2007 Где: Ростов-на-дону Репутация: нет Всего: нет |
правило в студию!!
может у меня алфавит шифрования - набор чисел? но опять же числа от 0 до 7 ![]() Это сообщение отредактировал(а) Defoult - 7.10.2007, 23:22 |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Из этой цитаты делаем вывод что у тебя алфавит шифрование имеет такую же мощность, как и нормативный алфавит. В условии у тебя сказано, что длина символа из алфавита - 3 бита. Что это означает? Только то, что алфавит содержит 8 различных символов, пофиг каких. Хочешь набор чисел - пожалста. Хочешь abcdefgh - пожалста. И это отностися как к нормативному алфавиту, так и к алфавиту шифрования. -------------------- 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 |
|||
|
||||
_Michael |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 23.6.2007 Где: з полонини Репутация: нет Всего: 6 |
ето я думаю соответствует действительности. и не вижу никакой проблемы с тремя битами. И не плутайте пожалуйста понятие слова символ в общем случае и в криптоанализе. В задании наверное имелось ввиду под словом символ - символ алфавита который имеет размер 8 поскольку три бита всего на кодирование одного символа а не то значение которое обычно мы имееем ввиду. Допустим у тебя есть набор символов "abcd" соответственно он в памяти представляется четырьмя байтами или 32мя битами. вроде так, точно в АSCII не смотрел: а - 01100001 b - 01100010 c - 01100011 d - 01100100 ето не сутьважно. или если все подряд одним потоком то 01100001011000100110001101100100. и так далее сколько у тебя там символов(имею ввиду тех что одним байтом кодируются) Все что тебе надо ето поделить етот поток на группы по три биты т.е: 011 000 010 110 001 001 100 011 011 001 00. и заменить каждую группу соответствующей по твоему закону подстановки. Тоесть выходит напркимер что из буквы "а" пролучается две полных группы и два бита остаются, которые ты дополняеш соответственно первым битом буквы "b" и так далее. Усек? А как делить ето уж придумай. Проще всего наверное сдвигать по три бита и использовать битовые маски для выделения очередной группы из трех бит. ето даже не С++ а сишка обыкновенная. Это сообщение отредактировал(а) _Michael - 8.10.2007, 18:58 -------------------- ...не убивайся ни о чем - все временно, хоть ночь темна но светлым днем беременна... Саади |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
_Michael, ты читал описание его алгоритма по ссылке?
![]() -------------------- 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 |
|||
|
||||
_Michael |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 23.6.2007 Где: з полонини Репутация: нет Всего: 6 |
оно правильно но в корне неверно для нашего случая. возьмем например числа 13 и 5 остача от деления их на 8 дает число 5. вот ету пятерку например согласно нашему закону подстановки мы заменили на 7 например. Потом при расшифровке ету ж семерку как мы будем знать на что заменять? на 5 или на 13? или ж может на 21? так-что здесь теряется как уже ктото казал взаимная однозначность или соответствие между символами двух алфавитов. Добавлено @ 19:06 Читал и что? ![]() Добавлено @ 07:49 Ето ж самое елементарное что есть в криптографии. Простая моноалфавитная подстановка. Это сообщение отредактировал(а) _Michael - 8.10.2007, 19:11 -------------------- ...не убивайся ни о чем - все временно, хоть ночь темна но светлым днем беременна... Саади |
|||
|
||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Для вашего - возможно...
Как ты установишь взаимнооднозначное соответствие, если мощность нормативного алфавита 26, а алфавита шифрования - 8? Что же касается условия как такового - там нигде явно не сказано, что нужно шифровать именно английский текст(и, таким образом, дробить его на трёхбитные токены). Там лишь сказано, что мощность алфавита - 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 |
|||
|
||||
_Michael |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 23.6.2007 Где: з полонини Репутация: нет Всего: 6 |
А кто сказал что именно английский алфавит длиной 26 есть нормативный? сказано просто зашифровать алфавитом с длиной символа три биты или както так. значит мы вибираем етот нормативный алфавит также таким самым по размеру. Не надо привязываться к длине 1 байт. ето для нас один символ - 1 байт, там же поток бит которы й мы сами делим по три биты потому что так мы условились и зашифровать нам надо также алфавитом с терхбитовыми символами Добавлено через 3 минуты и 31 секунду
Вот как дословно звучит задание. там не сказано какого именно алфавита. поетому имеется ввиду навероное и того и того. Добавлено через 7 минут и 14 секунд И почему все привязались к одному байту? потому что в С длина типа данных char - 1 байт? а есть еще юникодовские 2 байта. Ето ж просто заблуждение. Не надо плутать символи(char ) в программировании и в криптографии Добавлено через 12 минут и 54 секунды Вот именно что не указано и потому мы его принимаем за "свой" так сказать текст с длиной символа в три биты. И почему судя по твоих словах из английского текста следует что раз он английский то надо дробить по три биты? именно потому чтоб абстрагироваться от английского кириличного мы принимаем свой алфавит по три бита. Добавлено через 13 минут и 7 секунд ![]() Это сообщение отредактировал(а) _Michael - 8.10.2007, 19:41 -------------------- ...не убивайся ни о чем - все временно, хоть ночь темна но светлым днем беременна... Саади |
||||
|
|||||
archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Будем на бобах гадать что имеется ввиду а что нет? А может быть ещё имеется выводить на экран "кукареку"? Что написано то и имеется ввиду. Привязался только ты. И топикстартер. Покажешь мне хоть одно место, не выдранное из контекста, где я предлагаю дробить? Я лишь один раз озвучил предположение о том, что "возможно, задание предполагает дробить" и попросил показать задание. Увидев задание я опроверг это предположение. Ну и напоследок - ты САМ предлагаешь дробить:
Так может быть ты определишься со своими хаотическими мыслями и не будешь тут нести ересь? -------------------- 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 |
|||
|
||||
Defoult |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 26 Регистрация: 16.9.2007 Где: Ростов-на-дону Репутация: нет Всего: нет |
Я сегодня уточнил задание.....
вобщем так: мы работаем не с самими символами, а с их битами, весь текст мы представляем ввиде последовательности бит 0111011010111010011000100101100011001011100111111 затем разбиваем на группы по 3 бита, т.к. 1 буква - 1 бит (по заданию) если у меня 1 буква может занимать 3 бита, то ключ будет состоять у меня из 8 различных комбинаций этих битов 000 010 100 011 110 это ключ 101 001 111 и по этому ключу мы выполняем перестановку. Вот в принципе суть задания. Всем спасибо ![]() 2archimed7592 и _Michael хотел вам +1 дать, но пока не могу....Как только смогу, соазу вспомню вашу помощь ![]() Это сообщение отредактировал(а) Defoult - 8.10.2007, 21:53 |
|||
|
||||
_Michael |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 375 Регистрация: 23.6.2007 Где: з полонини Репутация: нет Всего: 6 |
archimed7592, Вот из етих твоих "и, таким образом, " выходит что если текст английский, таким образом дробить его на трёхбитные токены. Но ето все по большему счету несуттево(неважно наверное правильнее по русски). Видишь что моя интерпретация( не знаю более подходящего слова чтоб меня правильно поняли) задания оказалась верной. То-есть что действительно надо все подряд писать и разбивать по 3 бита:
Просто у меня тоже лабораторные были по етому и я примерно знаю что надо сделать. ![]() archimed7592, не обижайся, мы ж здесь пробуем помогти разобраться вместе, а не показать кто умнее. в каждого какие-то идеи есть, вот он ими и делится, и вместе мы приходим к какому-то общему знаменателю. ![]() Добавлено @ 22:42 Defoult, когда все задание уже стало ясно, думаю разберешся как по порциях по три бита брать. и подставлять ;) Это сообщение отредактировал(а) _Michael - 8.10.2007, 22:42 -------------------- ...не убивайся ни о чем - все временно, хоть ночь темна но светлым днем беременна... Саади |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |