Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
1 / 1 / 0
Регистрация: 05.12.2024
Сообщений: 60

Решение задач из книги Страуструпа (шифрование/дешифрование)

04.05.2025, 10:50. Показов 10129. Ответов 40

Студворк — интернет-сервис помощи студентам
Доброго времени суток,

Решаю задачки из книги Б.Страуструпа "Язык программирования С++. Специальное издание.", Бином, 2019.
Заинтересовали две: упр.9 и 10 из Пар.7.10. В упр. 9 предлагается написать программу шифрования по алгоритму c^key[i]. А в упр. 10 - написать программу, помогающую без знания ключа дешифровать текст, закодированный программой из упр. 9.
Весь смак в том, что предлагается воспользоваться алгоритмом из другой удивительной книги: "David Kahn: The Codebreakers". Т.е. это не переборы ключей, а другой алгоритм, определяющий длину ключа по повторам в тексте и далее угадывающий отдельные символы исходя из частоты их употребления в английском языке.

Я написал обе программы: и шифрующую, и дешифрующую. НО: алгоритм из книги рассчитан на работу с английским алфавитом - из шифрованного английского текста получаем открытый английский же текст. А при шифрования по алгоритму c^key[i] из латиницы всегда получается большой процент непечатаемых символов. Соответственно, при расшифровке строго по алгоритму на экран "выводятся" эти непечатаемые символы. (если расшифровывать примеры из книги "David Kahn: The Codebreakers" то программа работает, но там шифровалось подменой одних латинских букв другими, а не через c^key[i])

Вопрос: кто-нибудь вообще решал эту задачу 10 именно с этим алгоритмом из книги? решение есть или сама постановка задачи некорректна???
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
04.05.2025, 10:50
Ответы с готовыми решениями:

Решение задачи из книги Страуструпа
Пожалуйста помогите с задачей. "Напишите функцию char* strdup ( cons t char* ) , копирующую...

Каковы ваши впечатления от книги Страуструпа Программирование на языке С++(третье издание)?
Начал читать книгу Страуструпа Программирование на языке С++(третье издание), после прочтенных 100...

пример из книги страуструпа
struct pair { char* name; // ñòðîêà int val; // öåëîå }; ...

40
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
06.05.2025, 02:13
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Royal_X Посмотреть сообщение
Но я сейчас сравниваю не его код, а твой и мой.
Цитата Сообщение от Royal_X Посмотреть сообщение
а чем деление по модулю на каждой итерации лучше условия на каждой итерации?
Хз.
Просто надежнее. Просто короче.

Добавлено через 9 минут

Не по теме:

Royal_X, да и я не сильно на нем настаиваю, просто хотел показать этот метод. Тот кусок сильно бросился в глаза и в ребро.



Добавлено через 10 минут
Цитата Сообщение от Royal_X Посмотреть сообщение
а чем деление по модулю на каждой итерации лучше условия на каждой итерации?
Ну хз, вот реальный пример где я использовал этот метод Очередь целых чисел
Вот, и я даже не знаю как применить твой вопрос к нему.
То есть, он же не только для циклического прохода. Это общий метод.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6307 / 3029 / 1053
Регистрация: 01.06.2021
Сообщений: 11,504
06.05.2025, 07:36
SmallEvil, мы вообще зря стараемся. ТС выделил "терморектальный криптоанализ" как лучший ответ...
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
06.05.2025, 08:15
да у нее проблемы только с русскими буквами, английские работают нормально. Кодировка КОИ-8 для русских буков 2-х байтовая, вот и вылазят кракозябры. А назад в КОИ-8 из байтов нужно преобразовывать другой функцией, не помню уже какой. Просто так не заработает.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
06.05.2025, 08:21
Цитата Сообщение от alexu_007 Посмотреть сообщение
Кодировка КОИ-8 для русских буков 2-х байтовая
Я что-то пропустил? Когда КОИ-8 2-байтовой стала?
0
631 / 526 / 104
Регистрация: 05.08.2022
Сообщений: 2,810
06.05.2025, 09:11
Цитата Сообщение от SmallEvil Посмотреть сообщение
Это вместо сбрасывания счетчика на ноль, как в вашем коде.
Простой операцией.
Вот в этом куске кода:

C++
1
2
3
4
   std::size_t key_size = key.size();
   std::size_t k = 0;
   for(const auto& c : in)
      res += c ^ key[k++%key_size];
что значение переменной k пробежит последовательно по диапазону [0..key_size-1], что значение (k % key_size) пробежит по тому же диапазону.
0
1 / 1 / 0
Регистрация: 05.12.2024
Сообщений: 60
06.05.2025, 18:13  [ТС]
Цитата Сообщение от Royal_X Посмотреть сообщение
SmallEvil, мы вообще зря стараемся. ТС выделил "терморектальный криптоанализ" как лучший ответ...
Не огорчайтесь вы все лучшие))) Но юмор никогда лишним не бывает

Мне до вашего понимания языка еще копать и копать!
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
06.05.2025, 18:15
Цитата Сообщение от ADnD Посмотреть сообщение
Но юмор никогда лишним не бывает
А я и не шутил...
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
08.05.2025, 22:27
Цитата Сообщение от Royal_X Посмотреть сообщение
...ТС выделил "терморектальный криптоанализ" как лучший ответ...
Чушь. На неск. секунд опоздаешь - источник информации сдохнет от болевого шока. И ты уже никогда ничего не расшифруешь.

Добавлено через 2 минуты
Цитата Сообщение от Verevkin Посмотреть сообщение
Я что-то пропустил? Когда КОИ-8 2-байтовой стала?
Sorri. Перепутал с UTF-8.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
08.05.2025, 22:34
Цитата Сообщение от alexu_007 Посмотреть сообщение
Чушь. На неск. секунд опоздаешь - источник информации сдохнет от болевого шока. И ты уже никогда ничего не расшифруешь.
Ты просто не умеешь пользоваться терморектальным криптоанализатором. Тут надо умеючи.
Цитата Сообщение от alexu_007 Посмотреть сообщение
Sorri.
Пишется "Sorry".
Цитата Сообщение от alexu_007 Посмотреть сообщение
Перепутал с UTF-8.
UTF-8 тоже не является двухбайтной кодировкой. Матчасть учи.
0
08.05.2025, 22:55

Не по теме:

Цитата Сообщение от Verevkin Посмотреть сообщение
Ты просто не умеешь пользоваться
твой рязанский куратор хорош, видно, что неплохо тебя подготовил)

0
09.05.2025, 07:34

Не по теме:

Цитата Сообщение от Royal_X Посмотреть сообщение
твой рязанский куратор хорош, видно, что неплохо тебя подготовил)
Рязанский куратор - это я. :D У меня не было куратора, я самоучка.

0
09.05.2025, 18:43  [ТС]

Не по теме:

Какой интересный диалог развивается... И оказалось что достаточно было нужный пост лайкнуть... ;)

0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
10.05.2025, 14:26
Цитата Сообщение от Verevkin Посмотреть сообщение
UTF-8 тоже не является двухбайтной кодировкой. Матчасть учи.
В винде 10 кодировка UTF-8? Размер файла с латинскими буквами - 6 байт. С кириллицей - 12. d0 и d1 в файле с кириллицей откуда взялись?
Миниатюры
Решение задач из книги Страуструпа (шифрование/дешифрование)   Решение задач из книги Страуструпа (шифрование/дешифрование)  
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
10.05.2025, 14:33
Цитата Сообщение от Verevkin Посмотреть сообщение
Пишется "Sorry".
У мня английский с акцентом...
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
10.05.2025, 14:40
Цитата Сообщение от alexu_007 Посмотреть сообщение
В винде 10 кодировка UTF-8?
Какую выберешь, такая и будет. А шо не так?
Цитата Сообщение от alexu_007 Посмотреть сообщение
Размер файла с латинскими буквами - 6 байт. С кириллицей - 12. d0 и d1 в файле с кириллицей откуда взялись?
От верблюда. Я ж сказал - учи МАТЧАСТЬ.
0
737 / 704 / 110
Регистрация: 29.05.2015
Сообщений: 4,316
11.05.2025, 06:09
...позволяющий более компактно хранить и передавать символы Юникода, используя переменное количество байт (от 1 до 4)...
Это не то же, что я написал - применимо к данной задаче? Русские буквы как раз занимают по 2 байта.
0
Злостный нарушитель
 Аватар для Verevkin
10878 / 5817 / 1288
Регистрация: 12.03.2015
Сообщений: 26,855
11.05.2025, 08:28
Цитата Сообщение от alexu_007 Посмотреть сообщение
Это не то же, что я написал - применимо к данной задаче? Русские буквы как раз занимают по 2 байта.
Ну наконец-то ты прочитал матчасть. Молодец.
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6307 / 3029 / 1053
Регистрация: 01.06.2021
Сообщений: 11,504
11.05.2025, 13:19
Цитата Сообщение от alexu_007 Посмотреть сообщение
Русские буквы
да блет когда наконец поймете, что нет "русских" букв, а есть кириллические.
Цитата Сообщение от alexu_007 Посмотреть сообщение
занимают по 2 байта
да, потому что кириллические буквы находятся в диапазоне U+0080 ... U+07FF



В общем, один байт занимают ASCII символы. Причем, даже коды совпадают. Сделано это для совместимости.
Два байта занимают расширенная латиница и многие популярные алфавиты (кириллический, греческий, армянский, грузинский, еврейский, арабский, сирийский)
Дальше уже экзотика. Три байта это расширенный арабский, бенгальский, тамильский, тайский и пр. Четыре байта это иероглифы и исторические алфавиты.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
11.05.2025, 14:52
Добавлено через 6 минут
f0 9f 91 bd 20 55 54 46 2d 39 20 2d 20 63 6f 6d 69 6e 67 20 f0 9f 91 bd
Такой юникод(в utf8) форум отказывается принимать
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6307 / 3029 / 1053
Регистрация: 01.06.2021
Сообщений: 11,504
11.05.2025, 15:09
SmallEvil,
первые и последние четыре байта - f0 9f 91 bd - это символ инопланетянина U+1F47D, т.е. это 4-байтный utf-8 символ.
но дальше у тебя UTF-9 - coming тут однобайтные utf-8 символы.

Форум, не принимает именно символ инопланетянина. Он не принимает и всякие другие эмодзи, смайлики и многие остальные юникод символы. Видимо, это сделано так, чтобы люди использовали встроенные в редактор форума собственные смайлы, которые на форуме представлены как gif-картинки, а не как символы. Это сделано для того, чтобы данные символы отображались на всех устройствах, независимо от поддержки символов юникода тем или иным шрифтом и чтобы не было так, что у некоторых вместо смайлов квадратики. С другой стороны, это явно ограничивает возможности.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.05.2025, 15:09

Чем отличаються между собой книги Страуструпа
Чем отличаються между собой книги Страуструпа и какую имеет смысл почитать после Лафоре и Прата или...

Задачка из книги Страуструпа...
Доброго времени суток всем! Заранее благодарен за ответы и, возможные, пути исправления... Итак:...

Задача из книги Страуструпа
Меня настораживает несколько странная формулировка, я не понимаю зачем так предлагают решать...

Задачка из книги Страуструпа на поиск минимального и максимального введенного числа
Здравствуйте могли бы вы мне помочь в решении задачи. Вот собственно само условие. Условие:...

Задание из книги Страуструпа
Здравствуйте! Я решил начать изучать программирование, конкретнее - язык C++. Самым логичным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Оказывается, Unreal Engine позволяет качество на порядки выше, чем было в Lineedge
Etyuhibosecyu 05.07.2026
Жаль, конечно, что я не узнал об этом, пока Lineedge существовала, а то бы Noname2331 написал, что волки превращаются в пиксельную кашу, а я бы его попросил скачать какую-нибудь бриллиантовую или Pro. . .
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
интеграция AnyLogic с самописным REST API и переход на Odoo
anaschu 03.07.2026
Успешная интеграция AnyLogic с самописным REST API и переход на промышленную Odoo WMS Сегодня проделал огромный путь от простой симуляции физических процессов до построения полноценной. . .
Поиск всех путей на ориентированном графе. Linux
dcc0 02.07.2026
Переработка старого кода из моей статьи. Через несколько переработок от PHP кода к C89 (надеюсь, 89). Но довольно запутанно получилось. Код для Linux. Но если убрать time и то, что с ним. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru