Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
33 / 33 / 8
Регистрация: 17.09.2012
Сообщений: 193

Шифр Виженера, непонятки с работой формулы

19.10.2013, 00:20. Показов 4828. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
int main()
{
    //Текст, который необходимо зашифровать
    string text = "ATTACKATDAWN";
 
    //Ключ, которым шифруем текст
    string key = "LEMONLEMONLE";
 
    //Объявляем алфавитную доску
    int ASCII = 26; //Количество задействованных символов
    int beginASCII = 65; //Инициализируем первым символом 'A'
    unsigned char alphabetBoard[ASCII]; //Размер доски - промежуток между(включая) 65 и 90 ASCII
    for(int i = 0; i < ASCII; i++) alphabetBoard[i] = (char) beginASCII++; //Инициализируем доску значениями
 
    //Бежим по алфавитной доске и сравниваем значения
    for(int j = 0; j < text.length(); j++)
    {
        //Поиск буквы текста в алфавите
        for(int i = 0; i < ASCII; i++)
        {
            if(alphabetBoard[i] == text[j])
            {
                //Если нашли, переходим к ключу
                for(int n = 0; n < ASCII; n++)
                {
                    //Поиск буквы ключа в алфавите
                    if(alphabetBoard[n] == key[j])
                    {
                        //Если нашли переходим к выявлению шифро-буквы
                        int cryptLetter = (i + n) % ASCII; //Индекс буквы текста + индекс ключа % на алфавит
                        cout << alphabetBoard[cryptLetter]; //Печать шифро-буквы
                        break;
                    }
                }
            }
        }
    }
 
    return 0;
}
Правильность работы проверяю по эталону с виккипедии:
Исходный текст: ATTACKATDAWN
Ключ: LEMONLEMONLE
Зашифрованный текст: LXFOPVEFRNHR
В данном случае он отрабатывает верно.
Меняю условие в 9-10 строке:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
int main()
{
    //Текст, который необходимо зашифровать
    string text = "ATTACKATDAWN";
 
    //Ключ, которым шифруем текст
    string key = "LEMONLEMONLE";
 
    //Объявляем алфавитную доску
    int ASCII = 223; //Количество задействованных символов
    int beginASCII = 33; //Инициализируем первым символом '!'
    unsigned char alphabetBoard[ASCII]; //Размер доски - промежуток между(включая) 33 и 255 ASCII
    for(int i = 0; i < ASCII; i++) alphabetBoard[i] = (char) beginASCII++; //Инициализируем доску значениями
 
    //Бежим по алфавитной доске и сравниваем значения
    for(int j = 0; j < text.length(); j++)
    {
        //Поиск буквы текста в алфавите
        for(int i = 0; i < ASCII; i++)
        {
            if(alphabetBoard[i] == text[j])
            {
                //Если нашли, переходим к ключу
                for(int n = 0; n < ASCII; n++)
                {
                    //Поиск буквы ключа в алфавите
                    if(alphabetBoard[n] == key[j])
                    {
                        //Если нашли переходим к выявлению шифро-буквы
                        int cryptLetter = (i + n) % ASCII; //Индекс буквы текста + индекс ключа % на алфавит
                        cout << alphabetBoard[cryptLetter]; //Печать шифро-буквы
                        break;
                    }
                }
            }
        }
    }
 
    return 0;
}
Теперь доска не 26 символов, а 223. И запись в массив не с A(65), а с !(33) т.е. захотел расширить доску до кирилицы, включая часть спец-символов и оба регистра.
Получаю:
Исходный текст: ATTACKATDAWN
Ключ: LEMONLEMONLE
Зашифрованный текст: lxAopveArnBr
т.е. во первых почти все в нижнем регистре, во вторых - там где большие A - это все не верно.
Попробовал в джаве - там вот эти вот большие А вообще не отображаются, а большая B является запятой.

Почему из-за расширения таблицы перестает работать формула?
P.S> я понимаю, что сама реализация хромает на обе ноги, но суть не в этом.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.10.2013, 00:20
Ответы с готовыми решениями:

Шифр Цезаря и шифр Виженера
1. Используя шифр Цезаря расшифруйте слово ЛГПЗРГ. Шифр Цезаря для русского алфавита со сдвигом на три позиции вправо 2. Используя шифр...

Шифр Виженера, шифр Скитала
Я много прочитал информации и захотел реализовать эти шифры на Buider C++, а вот как это сделать. Кому интересно, напишите мне примеры этих...

Шифр Виженера
Составьте программы (желательно отдельно), одна из которых шифрует, а другая расшифровывает текст по принципу Виженера.

3
54 / 54 / 37
Регистрация: 05.09.2013
Сообщений: 1,864
19.10.2013, 03:17
Формула работает. Вы изменили алфавит - изменился зашифрованный текст (хотя исходное сообщение осталось прежнее). Попробуйте нарисовать квадрат Виженера и выполнить шифрование вручную.
1
33 / 33 / 8
Регистрация: 17.09.2012
Сообщений: 193
19.10.2013, 16:50  [ТС]
Цитата Сообщение от FiLF Посмотреть сообщение
Формула работает. Вы изменили алфавит - изменился зашифрованный текст (хотя исходное сообщение осталось прежнее). Попробуйте нарисовать квадрат Виженера и выполнить шифрование вручную.
Попробую! Но, если расширить таблицу Виженера

То ведь не должен измениться шифр у значений старой части таблицы.
 Комментарий модератора 
Выкладывайте картинки на сам форум.
0
54 / 54 / 37
Регистрация: 05.09.2013
Сообщений: 1,864
21.10.2013, 11:06
Цитата Сообщение от FliXis Посмотреть сообщение
Попробую! Но, если расширить таблицу Виженера
http://cs416229.vk.me/v4162291... OOt3Cg.jpg
То ведь не должен измениться шифр у значений старой части таблицы.
Нет, исходная таблица не является частью расширенной.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.10.2013, 11:06
Помогаю со студенческими работами здесь

Шифр Виженера
Доброго времени суток! Нужно генерировать случайный ключ из букв, для шифрование слова методом Виженера(длина ключа может быть любой). ...

Шифр Виженера
Салют(; Написала прогу с реализацией одного метода, описанного на википедии, по формуле все вроде просто(на фотографии 3 метод), нужно...

Шифр Виженера
Был бы до жути благодарен с помощью шифра Виженера... С этими шифрами вообще что-то не ладится... Заранее большое спасибо!!!!

Шифр Виженера
Дан текст, зашифрованный шифром Виженера. Пожалуйста помогите найти ключ к шифру, дальше я уже сам. Данный текст: ...

Шифр Виженера
Пишу программу, не выводит итоговый зашифрованный текст в текстбокс, подскажите как исправить. private void...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru