33 / 33 / 8
Регистрация: 17.09.2012
Сообщений: 193

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

19.10.2013, 00:20. Показов 4658. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
Мастер-класс по микросервисам на Node.js
Reangularity 21.06.2025
Node. js стал одной из самых популярных платформ для микросервисной архитектуры не случайно. Его неблокирующая однопоточная модель и событийно-ориентированный подход делают его идеальным для. . .
Управление Arduino из WPF приложения
Wired 21.06.2025
Зачем вообще связывать Arduino с WPF-приложением? Казалось бы, у Arduino есть собственная среда разработки, своя экосистема, свои способы управления. Однако при создании серьезных проектов. . .
Звёздная пыль
kumehtar 20.06.2025
Я просто это себе представляю: как создавался этот мир. Как энергия слипалась в маленькие частички. Как они собирались в первые звёзды, как во вселенной впервые появился Свет. Как эти звёзды. . .
Создание нейросети с PyTorch
AI_Generated 19.06.2025
Ключевое преимущество PyTorch — его питоновская натура. В отличие от TensorFlow, который изначально был построен как статический вычислительный граф, PyTorch предлагает динамический подход. Это. . .
JWT аутентификация в ASP.NET Core
UnmanagedCoder 18.06.2025
Разрабатывая веб-приложения, я постоянно сталкиваюсь с дилеммой: как обеспечить надежную аутентификацию пользователей без ущерба для производительности и масштабируемости? Классические подходы на. . .
Краткий курс по С#
aaLeXAA 18.06.2025
Здесь вы найдете все необходимые функции чтоб написать програму на C# Задание 1: КЛАСС FORM 1 public partial class Form1 : Form { Spisok listin = new Spisok(); . . .
50 самых полезных примеров кода Python для частых задач
py-thonny 17.06.2025
Эффективность работы разработчика часто измеряется не количеством написаных строк, а скоростью решения задач. Готовые сниппеты значительно ускоряют разработку, помогают избежать типичных ошибок и. . .
C# и продвинутые приемы работы с БД
stackOverflow 17.06.2025
Каждый . NET разработчик рано или поздно сталкивается с ситуацией, когда привычные методы работы с базами данных превращаются в источник бессонных ночей. Я сам неоднократно попадал в такие ситуации,. . .
Angular: Вопросы и ответы на собеседовании
Reangularity 15.06.2025
Готовишься к техническому интервью по Angular? Я собрал самые распространенные вопросы, с которыми сталкиваются разработчики на собеседованиях в этом году. От базовых концепций до продвинутых. . .
Архитектура Onion в ASP.NET Core MVC
stackOverflow 15.06.2025
Что такое эта "луковая" архитектура? Термин предложил Джеффри Палермо (Jeffrey Palermo) в 2008 году, и с тех пор подход только набирал обороты. Суть проста - представьте себе лук с его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru