Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.89
Abbok
0 / 0 / 0
Регистрация: 21.05.2013
Сообщений: 2
#1

шифр RSA - C++

21.05.2013, 14:57. Просмотров 1222. Ответов 7
Метки нет (Все метки)

Добрый день, люди добрые помогите )) не могу понять в чем ошибка...
сам алгоритм
Два больших простых числа P и Q
N=PQ
затем вычисляется функция эйлера fi=(P-1)(Q-1) и выбирается некоторое D (d<fi) взаимно простое с fi.
и по обобщенному алгоритму эвклида находится С, такое что c*d mod fi=1
Дальше шифрование. e=m^d mod n, где m- символ который шифруем
Расшифровка. m`=e^c mod 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
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
#include <iostream>
#include <cstdlib>
#include <ctime>
 
using namespace std;
long long gcd(long long a,long long b){
    return b?gcd(b,a%b):a;
}
 
long fastPwr(unsigned long a, unsigned  long n, unsigned p){
    int cnt;
    int i=0;
    double dbl=n;
    unsigned long res=1;
    unsigned long val=a;
 
    (n&01)? res=(res*val)%p : res=1;
    cnt=ceil(log(dbl)/log(2.0));
    
    while(i<cnt){
        val=(val*val)%p;
        if(n&(2<<i)){
            res=(res*val)%p;
        }
        i++;
    }
    return res;
}
 
void evkl(long long  a,long long b,long long u[3]){
    long long v[3], t[3];
    u[0] = a, u[1] = 1, u[2] = 0;
    v[0] = b ,v[1] = 0, v[2] = 1;
    while(v[0]){
        long long q = u[0] / v[0];
        t[0] = u[0] % v[0];
        t[1] = u[1] - q * v[1];
        t[2] = u[2] - q * v[2];
        for(int i = 0; i < 3; ++i)
            u[i] = v[i], v[i] = t[i];
    }
}
 
int prime(int a){
   if (a <= 1)
        return false;
    for(int i = 2; i*i <= a; i++) {
        if (a % i == 0) {
            return false;
        }
    }
    return true;
}
 
int rand_prime(int size){
    int val=0;
    while(true){
        val=rand()%size+2;  
        if (prime(val)) break;
    }
    return val;
}
 
void findExp(long f, long long *d, long long *c){
    long long u[3];
    do{
        do{
            *d=rand_prime(f);
        }while(gcd(f,*d)!=1);
        evkl(*d,f,u);
        if(u[1]<0) u[1]+=f;
        *c=u[1];
    }while(((*c * *d)%f)!=1);
}
 
void main(){
    srand(time(NULL));
    long long m,p,q,n,eiler,d,c,e,dm;
    long long x,y,b;
    m=9;
    p=rand_prime(40);
    q=rand_prime(40);
    cout << "p=" << p << endl;
    cout << "q=" << q << endl;
    n=p*q;
    eiler=(p-1)*(q-1);
 
    findExp(eiler,&d,&c);
    // Кодируем m
    e=fastPwr(m,d,n);
    // декодируем сообщение
    dm=fastPwr(e,c,n);
    cout << "eiler= " << eiler << endl;
    cout << "d=" << d << endl;
    cout << "c=" << c << endl;
    cout << "e=" << e << endl;
    
    cout << "dm=" << dm << endl;
    system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2013, 14:57     шифр RSA
Посмотрите здесь:

RSA - C++
бьюсь головой об стол с перерывами на обед... вот код: bool prost(int z) { for(int i=2; i&lt;=sqrt((float)z); i++) if(z%i == 0) ...

RSA - иероглифы - C++
Привет всем! Возникла проблема. Есть программа на RSA (честно, помогали люди) - но почему - то при шифровании выводит иероглифы, и мне...

шифрование RSA - C++
Помогите пожалуйста с задачей: Составить программу на языке программирования С++, которая осуществляет шифрование информации по правилу...

PolarSSL RSA - C++
Помогите разобраться с криптобиблиотеками PolarSSL (сейчас она уже называется mbed TLS), а именно с библиотекой RSA. Уже который день никак...

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

Шифрование RSA - C++
Доброго всем времени суток. Делаю курсовую работу по криптографии - реализация алгоритма RSA. Вот написал уже целый код, который работает...

Ключи RSA - C++
Помогите, пожалуйста, разобраться с ключами для криптосистемы RSA :) А конкретнее с их генерацией, написать надо самому, реализован набор...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
schdub
2945 / 1289 / 238
Регистрация: 19.01.2009
Сообщений: 3,366
Завершенные тесты: 1
21.05.2013, 17:58     шифр RSA #2
Цитата Сообщение от Abbok Посмотреть сообщение
Два больших простых числа P и Q
Выбрать два простых различных числа
т.е. при генерации P и Q нужно делать что-то типа:
C
1
2
3
//...
for (p = rand_prime(40); (q=rand_prime(40)) == p;);
//...
вместо строк 82 и 83
Abbok
0 / 0 / 0
Регистрация: 21.05.2013
Сообщений: 2
21.05.2013, 19:00  [ТС]     шифр RSA #3
Да, спасибо, это я уже заметил правда сделал немного по-другому, через while. Но все равно раза с 10-15 можно наткнуться на неправильно расшифрованный символ.
schdub
2945 / 1289 / 238
Регистрация: 19.01.2009
Сообщений: 3,366
Завершенные тесты: 1
22.05.2013, 09:44     шифр RSA #4
Цитата Сообщение от Abbok Посмотреть сообщение
Но все равно раза с 10-15 можно наткнуться на неправильно расшифрованный символ.
при каких P и Q? судя по всему 2 и 3?
nonedark2008
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
22.05.2013, 09:54     шифр RSA #5
Abbok, небольшой вопрос. Ты учел, что если у тебя шифруемое сообщение окажется больше чем n, то твое сообщение расшифруется неверно?
lexflax
10 / 10 / 1
Регистрация: 03.04.2011
Сообщений: 627
20.12.2013, 05:29     шифр RSA #6
вы кодируете только числа на сколько я понял, а если придется закодировать текст?
bradobrei
20.12.2013, 06:21
  #7

Не по теме:

Эх... на прошлом курсе этим занимались, алгоритм с подписью интересней

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2013, 11:58     шифр RSA
Еще ссылки по теме:

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

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

Криптография, RSA метод - C++
#include&lt;iostream&gt; #include&lt;time.h&gt; using namespace std; void RSA(char *infa) { int d = 0,a,b,n; while (d &lt; 2) { a =...

RSA-степень-переполнение - C++
Хай. Проблема: нужно возводить в степень большие числа (это для шифрования методом RSA). НО: если результат меньше 19 знаков, то все в...

RSA на С++ с графическим интерфейсом - C++
Здравствуйте! Прошу вашей помощи, мне нужно написать программку, которая реализовывает алгоритм RSA с использованием графического...


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

Или воспользуйтесь поиском по форуму:
nonedark2008
889 / 628 / 126
Регистрация: 28.07.2012
Сообщений: 1,697
20.12.2013, 11:58     шифр RSA #8
Цитата Сообщение от lexflax Посмотреть сообщение
вы кодируете только числа на сколько я понял, а если придется закодировать текст?
Текст можно представить в виде набора чисел.
Yandex
Объявления
20.12.2013, 11:58     шифр RSA
Ответ Создать тему
Опции темы

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