4 / 4 / 4
Регистрация: 09.03.2014
Сообщений: 187
1

Криптография, RSA метод

04.04.2015, 01:08. Показов 670. Ответов 5
Метки нет (Все метки)

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
#include<iostream>
#include<time.h>
using namespace std;
void RSA(char *infa)
{
    int d = 0,a,b,n;
    while (d < 2)
    {
         a = rand() % 20;
         b = rand() % 20;
         n = a*b;
        d= (a - 1)*(b - 1) + 1;
    }
    
    int e=1;
    while(true)
    {
        if ((e*d) % (d - 1) != 1)
            e = rand() % 20;
        else
            break;
    }
    //cout << e << "//" << n << "//" << d << endl;
    for (int i = 0; i < strlen(infa); i++)
    {
        infa[i] = (infa[i] ^ e) % n;//зашифровка
    }
    cout << infa<<endl;
    for (int i = 0; i < strlen(infa); i++)
        infa[i] = (infa[i] ^ d) % n;//дешифровка
    cout << infa;
}
void main()
{
    srand(time(NULL));
    char infa[100];
    cin.ignore();
    cin.getline(infa, 100);
    RSA(infa);
    system("pause");
}
не могу понято чего алгоритм работает не корректно(он то шифрует то нет и не может расшифровать)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.04.2015, 01:08
Ответы с готовыми решениями:

Криптография с асимметричными ключами | Расшифруйте/Зашифруйте по алгоритму RSA
Добрый вечер, уважаемые пользователи форума! Подскажите, пожалуйста, желательно примером ниже, как...

Криптография метод шифрования Triple-DES
Может кто-нибудь объяснить на подобном языке с примером шифровки (входные данные и исходные) как...

Криптография - метод Цезаря. Ошибка расшифровки
Есть программа... Метод Цезаря, сдвиг +3, должна шифровать и расшифровывать... Шифрует нормально -...

Шифр Виженера. Метод перебора. Расшифровать - Криптография
С помощью метода полного перебора восстановить исходный текст шифрограммы, зашифрованной шифром...

5
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
04.04.2015, 09:44 2
a и b должны быть простыми числами, шифрование выполняется возведением в степень, а не xor'ом как у тебя и т. д.
В общем здесь читай: https://ru.wikipedia.org/wiki/RSA
0
4 / 4 / 4
Регистрация: 09.03.2014
Сообщений: 187
04.04.2015, 10:50  [ТС] 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
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
#include<iostream>
#include<time.h>
#include<cmath>
using namespace std;
void RSA(char *infa)
{
    int d = 0,a,b,n;
    while (d < 2)
    {
         a = 1+rand() % 20;
        
         int i = 2;
         while(i  < a)
         {
            // cout << a;
             if (a%i == 0)
             {
                 a = 1+rand() % 20;
                 i = 1;
             }
             else
                 i++;
         }
         b =1+rand() % 20;
         int j =2;
         while (j  < b)
         {
             if (b%j == 0)
             {
                 b = 1+rand() % 20;
                 j = 1;
             }
             else
                 j++;
                 
         }
         n = a*b;
        d= (a - 1)*(b - 1) + 1;
    }
    
    int e=1;
    while(true)
    {
        if ((e*d) % (d - 1) != 1)
            e = rand() % 20;
        else
            break;
    }
    cout << e << "//" << n << "//" << d << endl;
    for (int i = 0; i < strlen(infa); i++)
    {
        infa[i] = char((pow((double)infa[i],(double)e))) % n;//зашифровка
    }
    cout << infa<<endl;
    //for (int i = 0; i < strlen(infa); i++)
    //  infa[i] = char((pow((double)infa[i], (double)d))) % n;//дешифровка
    //cout << infa;
}
void main()
{
    srand(time(NULL));
    char infa[100];
    cin.ignore();
    cin.getline(infa, 100);
    RSA(infa);
    system("pause");
}
Все равно таже проблема(
0
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
04.04.2015, 13:33 4
Арифметика должна быть целочисленная, никаких pow(), но: возводить в такие огромные степени непосредственно не получится. Там применяется оптимизация. Читай здесь: http://webcache.googleusercont... clnk&gl=ru
0
4 / 4 / 4
Регистрация: 09.03.2014
Сообщений: 187
04.04.2015, 15:15  [ТС] 5
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
#include<iostream>
#include<time.h>
#include<cmath>
using namespace std;
void RSA(char *infa)
{
    int d = 0,a,b,n;
    while (d < 2)
    {
         a = 1+rand() % 20;
        
         int i = 2;
         while(i  < a)
         {
            // cout << a;
             if (a%i == 0)
             {
                 a = 1+rand() % 10;
                 i = 1;
             }
             else
                 i++;
         }
         b =1+rand() % 20;
         int j =2;
         while (j  < b)
         {
             if (b%j == 0)
             {
                 b = 1+rand() % 10;
                 j = 1;
             }
             else
                 j++;
                 
         }
         n = a*b;
        d= (a - 1)*(b - 1) + 1;
    }
    
    int e=1;
    while(true)
    {
        if ((e*d) % (d - 1) != 1)
            e = rand() % 20;
        else
            break;
    }
    cout << e << "//" << n << "//" << d << endl;
    int size=strlen(infa);
    for (int i = 0; i <size; i++)
    {
        //cout <<(double)infa[i]<< " ";
        infa[i] = pow((double)infa[i], (double)e);
        infa[i] = infa[i] % n;
        cout << infa[i] << " ";
        //cout <<  infa<<" ";
    }
    cout <<endl;
    int buf;
    for (int i = 0; i <size; i++)
    {
        buf = (long long)pow((double)infa[i], (double)d);//дешифровка
        buf = buf%n;
        cout << buf << " ";
        //cout << (int)infa[i] << " ";
    }
 
}
void main()
{
    //srand(time(NULL));
    char infa[100];
    cin >> infa;
    RSA(infa);
   // cout << 13 * 13 * 13 * 13 * 13 * 13 * 13;
    system("pause");
}
не правильно шифравало из-за cin.getline и strlen() теперь шифрует верно но расшифровует не верно в результате выходит тоже самое что и при шифровке хотя алгоритм вроде как правильный
0
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
04.04.2015, 20:24 6
Должно быть e > 1. Арифметика только целочисленная.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.04.2015, 20:24
Помогаю со студенческими работами здесь

Шифр Виженера. Метод перебора. Расшифровать - Криптография
Помогите пожалуйста! Известна длина ключа, расшифровать текст (пробел является частью алфавита)...

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

Метод шифрования RSA
помогите найти ошибку, код не правильно работает &lt;? function encode_msg ($text) { $p = 3; ...

криптография. метод шифрования- Алгебраические методы (матрица*вектор_столбец), объект-пароли в файле паролей
помогите плиз. есть сам метод, как с паролями сделать его не понимаю... программирования толком не...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru