С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/88: Рейтинг темы: голосов - 88, средняя оценка - 4.77
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 218
1

Шифр Виженера

07.10.2021, 20:04. Показов 15867. Ответов 48
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите, как написать шифрование, расшифрование и ключик?
0
Programming
Эксперт
9485 / 562 / 19
Регистрация: 12.04.2006
Сообщений: 11,671
Блог
07.10.2021, 20:04
Ответы с готовыми решениями:

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

Шифр Виженера на C++
Помогите пожалуйста с заданием. От вас зависит стипендия в течении семестра. Рабочее задание:...

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

Шифр Виженера
Есть вот такой код (его кусок): string symbols =...

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

48
Эксперт функциональных языков программированияЭксперт С++
4202 / 2052 / 966
Регистрация: 01.06.2021
Сообщений: 7,171
07.10.2021, 20:26 2
Miristeri, я когда-то писал консольную программу на С++ для шифрования, расшифрования шифра по ключу, а также по взлому шифра без ключа. Причем, программа принимала и выводила текст как в самой консоли, так и читала и сохраняла текстовые файлы. У меня вышло чуть более 400 строк кода. Никакой трудности при написании не возникало, все формулы есть в Википедии. Начните что-то писать, если не получится, то тут мы поможем.
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 218
07.10.2021, 20:31  [ТС] 3
Royal_X, А можете написать пожалуйста программу, чтобы была возможность зашифровать, расшифровать и указать ключик? Пожалуйста.
0
Эксперт функциональных языков программированияЭксперт С++
4202 / 2052 / 966
Регистрация: 01.06.2021
Сообщений: 7,171
07.10.2021, 20:53 4
Miristeri,
- вы уже создаете вторую тему о шифре Вижинера, там вам уже ответили и тема помечена, что с ответом
- вы не хотите ничего попробовать сами
- это вам не пару строчек написать, поэтому не уверен, что кто-то на форуме найдется, кто это сделает (хотя, кто знает)
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 218
07.10.2021, 21:20  [ТС] 5
Royal_X, Дайте мне вашу программу, я посмотрю и из неё лишние уберу.

Добавлено через 21 минуту
Royal_X, Вот есть программа, только вот выводит одинаковые символы
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
#include "windows.h"
#include <ctime>
#include <string>
#include <iostream>
#include <tchar.h>
#include <conio.h>
#include <stdlib.h>
#include <sstream>
#include <fstream>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    string key = ""; //Строка - ключ ;
    string key_on_s = "";
    string A = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя ";
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    int shift = 0;
 
    int n;
    cout << "Введите сдвиг таблицы шифрования\n";
    cin >> n;
    char arr[34][34];
 
    //формирование алфавита
 
    for (int i = 0; i < 34; i++) {
        for (int j = 0; j < 34; j++)
        {
            if (i == 0) {
                arr[i][j] = A[j];
            }
            if (i == 1) {
                arr[i][j] = A[(j + n) % 34];
            }
            if (i > 1) {
                shift = j + i + n - 1;
                if (shift >= 34) shift = shift % 34;
                arr[i][j] = A[shift];
 
            }
            cout << arr[i][j];
        }
        cout << endl;
    }
 
    string result = ""; //Строка - результат
    bool flag;
    int x = 0, y = 0; //Координаты нового символа из таблицы Виженера
    cout << "Введите слово для шифрования\n 1\n";
    int v;
    cin >> v;
    string s; //Строка считанная из файла
 
    if (v == 1) 
    {
        cout << "Введите слово для шифрования \n";
        cin >> s;
    }
    else {
        setlocale(LC_ALL, "Russian");//Чтение файла
 
        ifstream in("");
        getline(in, s);
        cout << "Текст файла: \n" << s << endl;
        in.close();
    }
    
    cout << "Введите ключ\n";
    cin >> key;
 
    for (int i = 0; i < s.size(); i++) {
        key_on_s += key[i % key.length()];
    }
    cout << key_on_s << endl;
 
    for (int i = 0; i < s.length(); i++)
    {
        int l = 0;
        flag = false;
        while ((l < 34) && (flag == false))
        {
            //Если символ найден
            if (key_on_s[i] == arr[0][l])
            {
                //Запоминаем в х номер столбца
                x = l;
                flag = true;
            }
            l++;
        }
        while ((l < 34) && (flag == false))
        {
            if (key_on_s[i] == arr[l][0])
            {
                //Запоминаем в у номер строки
                y = l;
                flag = true;
            }
            l++;
        }
        result += arr[x][y];
    }
    cout << "Вывод\n";
    int v1;
    cin >> v1;
    
    cout << result << endl;
    
    
    system("pause");
 
}
0
Эксперт функциональных языков программированияЭксперт С++
4202 / 2052 / 966
Регистрация: 01.06.2021
Сообщений: 7,171
07.10.2021, 21:30 6
Цитата Сообщение от Miristeri Посмотреть сообщение
только вот выводит одинаковые символы
потому что это не ваш код, а из stackoverflow
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 218
07.10.2021, 21:36  [ТС] 7
Royal_X, А какая разница, я сама не умею, вот ищу.

Добавлено через 3 минуты
Royal_X, Я немножко убрала лишнего, чтобы была только консолька.
0
Эксперт функциональных языков программированияЭксперт С++
4202 / 2052 / 966
Регистрация: 01.06.2021
Сообщений: 7,171
07.10.2021, 21:42 8
Miristeri, вот так происходит шифрование и расшифрование. Написал быстро по-простому. Свой код не могу дать, писал на другом устройстве.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int modulo(int a, int b){
    return a >= 0 ? a % b : (b - abs(a % b)) % b;
}
 
string encryptText(string text, string key){
    int len = text.length();
    string e_text;
    for (int i = 0; i < len; i++)
        e_text += ((text[i] + key[i]) % 26) + 65;
    return e_text;
}
 
string decryptText(string text, string key){
    int len = text.length();
    string d_text;
    for (int i = 0; i < len; i++)
        d_text += modulo(text[i] - key[i], 26) + 65;
    return d_text;
}
2
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 218
07.10.2021, 21:46  [ТС] 9
Royal_X, А что за 26 и + 65?

Добавлено через 1 минуту
Royal_X, А как будет ключик работать?
0
Эксперт функциональных языков программированияЭксперт С++
4202 / 2052 / 966
Регистрация: 01.06.2021
Сообщений: 7,171
07.10.2021, 21:48 10
Miristeri, текст и ключ должны быть заглавными англ буквами и написано слитно
1
40 / 44 / 1
Регистрация: 19.01.2021
Сообщений: 534
07.10.2021, 21:52 11
Royal_X, А куда мне это всё вставить?
0
Эксперт функциональных языков программированияЭксперт С++
4202 / 2052 / 966
Регистрация: 01.06.2021
Сообщений: 7,171
07.10.2021, 21:54 12
нужно еще длину ключа уравнять с длиной текста
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 218
07.10.2021, 22:04  [ТС] 13
Royal_X, А что ключ делать в программе? Вот я видела до этого в программах на видео, там вводят сначала слова а потом ключ.

Добавлено через 1 минуту
Royal_X, Вот допустим как в данном коде который я вам показала, там в первую очередь вписываешь, с какого порядка символов начать, потом слово и ключ(зачем нужен там, и как он работает). Ключ я сама знаю зачем нужен вообще не касаясь даже программы.
0
845 / 648 / 323
Регистрация: 24.02.2017
Сообщений: 2,289
07.10.2021, 23:05 14
Лучший ответ Сообщение было отмечено Miristeri как решение

Решение

один из вариантов шифрования

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
#include <iostream>
#include <string>
 
int main()
{
    std::string alphabet = "abcdefghijklmnopqrstuvwxyz ";
    std::string key;
    std::string text;
    std::string code;
 
    std::cout << "text = ";
    std::getline(std::cin, text);
    std::cout << "key = ";
    std::getline(std::cin, key);
 
    while (key.length() < text.length()) key += key;
 
    size_t i = 0;
    while (i<text.length()) {
        size_t j = 0;
        size_t t, k;
        while (alphabet[j]) {
            if (alphabet[j] == text[i]) {
                t = j; break;
            } j++;
        }
        j = 0;
        while (alphabet[j]) {
            if (alphabet[j] == key[i]) {
                k = j; break;
            } j++;
        }
        if ((t + k) < 27) code+= alphabet[t + k];
        if ((t + k) >= 27)
            code+= alphabet[t + k-27];
        i++;
    }
    std::cout<<  code;
}
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 218
07.10.2021, 23:26  [ТС] 15
повар1, Выдает ошибку Run-Time Check Failure #3 - The variable 't' is being used without being initialized. Что делать?

Добавлено через 8 минут
повар1, Извините, разобралась, всё заработало.

Добавлено через 5 минут
повар1, А расшифровку как сделать?

Добавлено через 50 секунд
повар1, То есть можно использовать тоже самое слово и ключ, но чтобы программа расшифровывала.
0
845 / 648 / 323
Регистрация: 24.02.2017
Сообщений: 2,289
07.10.2021, 23:27 16
Лучший ответ Сообщение было отмечено Miristeri как решение

Решение

корявый полный исходник показывает принцип работы


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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#include <iostream>
#include <string>
 
int main()
{
    std::string alphabet = "abcdefghijklmnopqrstuvwxyz ";
    std::string key;
    std::string text;
    std::string code;
 
    std::cout << "text = ";
    std::getline(std::cin, text);
    std::cout << "key = ";
    std::getline(std::cin, key);
 
    while (key.length() < text.length()) key += key;
 
    size_t i = 0;
    while (i<text.length()) {
        size_t j = 0;
        size_t t, k;
        while (alphabet[j]) {
            if (alphabet[j] == text[i]) {
                t = j; break;
            } j++;
        }
        j = 0;
        while (alphabet[j]) {
            if (alphabet[j] == key[i]) {
                k = j; break;
            } j++;
        }
        if ((t + k) < 27) code+= alphabet[t + k];
        if ((t + k) >= 27)
            code+= alphabet[t + k-27];
        i++;
    }
    std::cout<<  code;
 
    std::string rcode;
     i = 0;
    while (i < code.length()) {
        size_t j = 0;
        size_t t, k;
        while (alphabet[j]) {
            if (alphabet[j] == code[i]) {
                t = j; break;
            } j++;
        }
        j = 0;
        while (alphabet[j]) {
            if (alphabet[j] == key[i]) {
                k = j; break;
            } j++;
        }
        if ((t + k) < 27) rcode += alphabet[t - k];
        if ((t + k) >= 27)
            rcode += alphabet[t - k + 27];
        i++;
    }
 
    std::cout << "\n\n" << rcode;
}
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 218
07.10.2021, 23:32  [ТС] 17
повар1, Она как то работает странно, вроде шифрует, но не расшифровывает.

Добавлено через 1 минуту
повар1, В программе какое значение является ложным а должно являться истиной
0
845 / 648 / 323
Регистрация: 24.02.2017
Сообщений: 2,289
07.10.2021, 23:35 18
если текст без пробелов то должно работать, а так да глючит. Завтра доработаю
1
1 / 1 / 0
Регистрация: 05.10.2021
Сообщений: 218
07.10.2021, 23:36  [ТС] 19
повар1, Хорошо, буду ждать.
0
4866 / 2664 / 914
Регистрация: 29.11.2010
Сообщений: 5,746
07.10.2021, 23:46 20
Лучший ответ Сообщение было отмечено Miristeri как решение

Решение

Цитата Сообщение от Miristeri Посмотреть сообщение
Royal_X, А что ключ делать в программе? Вот я видела до этого в программах на видео, там вводят сначала слова а потом ключ.
Цитата Сообщение от Miristeri Посмотреть сообщение
Ключ я сама знаю зачем нужен вообще не касаясь даже программы.
Эммм...
Я не понял, объяснять ли вам, что шифр виженера системно работает только и исключительно с заглавными символами и для чего нужен ключ?

В коде уважаемого Royal_X есть всё, что нужно (кроме цикличности ключа, что крайне легко поправить).
И шифровка и расшифровка.
Вот пример использования:

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
#include <iostream>
 
using namespace std;
 
int modulo(int a, int b){
    return a >= 0 ? a % b : (b - abs(a % b)) % b;
}
 
string encryptText(string text, string key){
    int len = text.length();
    int key_len = key.length();
    string e_text;
    for (int i = 0; i < len; i++)
        e_text += ((text[i] + key[i % key_len]) % 26) + 65;
    return e_text;
}
 
string decryptText(string text, string key){
    int len = text.length();
    int key_len = key.length();
    string d_text;
    for (int i = 0; i < len; i++)
        d_text += modulo(text[i] - key[i % key_len], 26) + 65;
    return d_text;
}
 
int main(int argc, char **argv) {
 
    std::string text = "IWISHIWASAFISHINTHEBIGGESTOCEAN";
    std::string key = "password";
 
    std::string encrypted = encryptText(text, key);
    std::string decrypted = decryptText(encrypted, key);
    
    std::cout << text << std::endl;
    std::cout << encrypted << std::endl;
    std::cout << decrypted << std::endl;
    
    return 0;
}
0
07.10.2021, 23:46
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
07.10.2021, 23:46
Помогаю со студенческими работами здесь

Шифр Виженера c++
Шифр Виженера c++

Шифр Виженера
Надо написать программу на С++, расшифровывающую сообщение, зашифрованное шифром Виженера....

Шифр Виженера
У кого есть исходник на Си ?

Шифр Виженера
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;conio.h&gt; #include...

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

Шифр Виженера, непонятки с работой формулы
int main() { //Текст, который необходимо зашифровать string text = &quot;ATTACKATDAWN&quot;; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Блоги программистов
Обновление сайта www.historian.b­y
Reglage 05.01.2025
Обещал подвести итоги 2024 года для сайта. Однако начну с того, что изменилось за неделю. Добавил краткий урок по последовательности действий при анализе вредоносных файлов и значительно улучшил урок. . .
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(аси­­хронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru