Форум программистов, компьютерный форум, киберфорум
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
mr_programmer
0 / 0 / 0
Регистрация: 16.07.2017
Сообщений: 1
#1

Не работает RSA шифрование с++ - C++

16.07.2017, 19:54. Просмотров 393. Ответов 2

Всем доброго времени суток.
Я реализовал RSA шифрование на с++, но программа неправильно расшифровывает сообщение.
Пары {e, n} - открытый ключ и {d, n} - закрытый ключ выбрал кажется правильно, но алгоритм все равно работает не так как нужно.
Подскажите пожалуйста, что в нем не так и как его исправить, если кто знает)
Вот код:
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 <string>
#include <iostream>
 
static int p = 7;
static int q = 23;
static int n = p * q;
static int e = 7;
static int d = 19;
 
bool encrypt(std::string& strToEncrypt)
{
    if (strToEncrypt.size() < 1)
    {
        std::cerr << "Incorrect string to be encrypted.\n";
        return false;
    }
    std::string buffStrToEncrypt = strToEncrypt;
    strToEncrypt.clear();
    for (std::size_t i = 0; i < buffStrToEncrypt.size(); i++)
    {
        double k = 1;
        for (int j = 0; j < e; j++)
        {
            k *= buffStrToEncrypt[i];
        }
        int var = fmod(k, n);
        strToEncrypt += var;
    }
    return true;
}
 
bool decrypt(std::string& strToDecrypt)
{
    if (strToDecrypt.size() < 1)
    {
        std::cerr << "Incorrect string to be encrypted.\n";
        return false;
    }
    std::string buffStrToDecrypt = strToDecrypt;
    strToDecrypt.clear();
    for (std::size_t i = 0; i < buffStrToDecrypt.size(); i++)
    {
        double k = 1;
        for (int j = 0; j < d; j++)
        {
            k *= buffStrToDecrypt[i];
        }
        int var = fmod(k, n);
        strToDecrypt += var;
    }
    return true;
}
 
void main()
{
    std::string str = "Hello, world";
    std::cout << "Inputed: " << str << std::endl;
    encrypt(str);
    std::cout << "Encrypted: " << str << std::endl;
    decrypt(str);
    std::cout << "Decrypted: " << str << std::endl << std::endl;
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2017, 19:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работает RSA шифрование с++ (C++):

Генерация ключа rsa - C++
привет пишу криптоутилиту, загвоздка в генерации ключей, точнее, в генерации псевдослучайной посл-ти для них линейный конгруэнтный...

Криптосистема Эль Гамаля, RSA - C++
Доброе время суток =))) У меня вопрос к тем людям, которые реализовали, хотя-бы одну из этих криптосистем: сколько денег вы бы...

RSA шифрование - C++ Builder
Подскажите, пожалуйста, как использовать RSA шифрование и чтобы ключ можно было использовать в C# RSA

Шифрование RSA (нужен код) - C++ Builder
Очень нужна помощь в написании программы для шифрования с использованием алгоритма RSA. Принимаются любые советы.

RSA на С++ - C++ Builder
Доброго времени суток!Народ,ооочень нужна реализация алгоритма шифрования RSA,написанная на C++...И желательно с ключом хотя бы 128...

Алгоритм RSA - C++ Builder
Задание написать шифратор/дешифратор алгоритмом RSA. Подсчет всего нужно я совершил, но вот не знаю какой тип данных юзнуть. Даже в...

2
netBool
93 / 96 / 29
Регистрация: 16.11.2010
Сообщений: 462
Завершенные тесты: 3
17.07.2017, 20:20 #2
Когда я делал механизм шифрования на C++, правда это был С++ CLI, заметил такую вещь, что управляемый string и массив char было не одно и то же. Стринг не понимал невидимые символы управления char. Не знаю, в этом ли причина у вас, но во всяком случае я бы посоветовал работать с buffStrToDecrypt и buffStrToEncrypt как с массивом чар, а не стринг. Так имхо надежнее.
Ну это так, лирика

По самому алгоритму: я так посмотрел, в общем-то криптующая и дешифрующая функции идентичны по алгоритму. Во всяком случае я разницы не заметил, кроме других имен переменных. Словно encrypt шифрует, а decrypt шифрует еще глубже

Может быть нужно в decrypt нуэно вставить
C++
1
k = buffStrToDecrypt[i]/k;
вместо
C++
1
k *= buffStrToDecrypt[i];

Никогда не писал алгоритмов под RSA, возможно, я просто туплю...

Добавлено через 9 минут
И еще мне кажется, что при static int q = 23; дешифровка текста в принципе невозможна, т.к. в ANCII 256 бит, q должно быть минимум 256 бит, а для юникод и того больше

Простой пример на пальцах:
C++
1
2
3
4
int arr[3];
arr[0] = fmod(23,23);//=0
arr[1] = fmod(46,23);//=0
arr[2] = fmod(69,23);//=0
Три резальтата одинаковых. Как по остатку числа понять, какое число было исходным 23,46 или 69?

Добавлено через 5 минут
при q=23, остаток от деления будет от нуля до 23. ИМХО это имеет смысл если текст будет состоять только из 23 первых символов ANCII (или любой другой кодировки). Вроде так, поправьте меня, если я не прав
0
Avazart
Эксперт С++
7433 / 5472 / 310
Регистрация: 10.12.2010
Сообщений: 24,397
Записей в блоге: 17
18.07.2017, 15:11 #3
Цитата Сообщение от netBool Посмотреть сообщение
Когда я делал механизм шифрования на C++, правда это был С++ CLI, заметил такую вещь, что управляемый string и массив char было не одно и то же. Стринг не понимал невидимые символы управления char. Не знаю, в этом ли причина у вас, но во всяком случае я бы посоветовал работать с buffStrToDecrypt и buffStrToEncrypt как с массивом чар, а не стринг. Так имхо надежнее.
std::string чуть больше чем контейнер, так что вполне годится как буфер.
Если он не нравится работайте с std::vector<char> или std::vector<unsigned char>
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2017, 15:11
Привет! Вот еще темы с ответами:

RSA C++ Builder - C++ Builder
вот код программы, ошибку вооще не понимаю, долбался с ней на протяжении нескольких дней... и решил создать темку... ...

Шифрователь по алгоритму RSA - C++ Builder
Всем, приветик!!! Помогите кто может;)мне надо перевести число из десятичного представление в двоичную. Вообще я пишу шифрователь по...

RSA in RAD Studio - C++ Builder
Здравстуйте! Делал-переделывал прогу шифрования RSA. В 6 Билдере работает, в РАД Стулио выдавало ошибку на c_str(), но это было...

Как поменять результат шифрование \ Метод шифрование RSA - C#
Здравствуйте! Прошу помощи! В просторах интернета нашла одну статью в которой реализован метод шифрования RSA. Решила его опробовать, но...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.