Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

шифрование RSA

3.6K
12 февраля 2008 года
dimas09
92 / / 17.06.2007
Делаю шифрование RSA с небольшим ключем, но при (int)pow(C,D)%N возвращает число C

Код:
#include<stdlib.h>
#include<iostream>
#include<math.h>
#include<string>
using namespace std;

long int nod(long int a, long int b){
 int j,i;
 if (a>b) i=b; else i=a;
 for (j=i;j>=1;--j)
  if ((a%j == 0) && (b%j==0)) {
   return j;
   break;
   }
}

long int modinv (long int a, long int m) {
int i,b;
int x,j,y,c;
 b = m;
 c = a;
 i = 0;
 j = 1;
 while (c != 0) {
   x = b/c;
   y = b%c;
   b = c;
   c = y;
   y = j;
   j = i - j * x;
   i = y;
 }
 if (i < 0) i = i+m;
 return i;
}


#pragma argsused
int main(int argc, char* argv[])
{
long int P,Q,N,Ne,E,D,cs,ta;
P=random()/900000000%1000;  cout<<P<<"\n";
Q=random()/90000000%250;  cout<<Q<<"\n";
N= P*Q;                
Ne=(P-1)*(Q-1);    
E=3;
ta=Ne;
while (nod(E,ta)!=1) E+=2;
double cc=pow(E,Ne-1); cout<<cc;                  
D=modinv(E,Ne);
       
std::cout<<E<<"-"<<N<<"\n";  
std::cout<<D<<"-"<<N<<"\n";
string tmp,coded,decoded;
char buf[102];
int liter,i,kil;
getline(cin,tmp);
long int C[255];
for (i=0; i<tmp.size(); i++) {  
liter=int(tmp);                
    C=(int)pow(liter,E);
    snprintf(buf,10,"%d",C);
    coded+=buf;
}
kil=i;
cout<<coded<<"\n";
for (int i=0; i<kil; i++) {            
liter=int(tmp);                
    cout<<(char)((int)pow(C,D)%N)<<"\n";
}
        return 0;
}


правильно ли я использую алгоритм Евклида.
подскажите пожайлуста как быть.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог