Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2016, 19:38   #1
krasy
Пользователь
 
Регистрация: 14.04.2015
Сообщений: 40
Печаль Помогите подправить RSA

Написала программу, которая должна зашифровать слово по алгоритму RSA. Числа должны подбираться рандомно, из-за этого программа очень долго думает. Надеюсь, кто-нибудь подскажет, как можно лучше реализовать этот момент.
Код:
#include<iostream>
#include<conio.h>
#include<math.h>
#include<cstdlib>
#include<time.h>
#include <string.h>

using namespace std;



int main()
{
	char s[100];
	char m[100];
	int p,q,p1,q1,d,d1,n,t=0;
	double fn;
	
	cout<<"Vvod: ";
	cin.getline(m,100);	
	
	srand(time(NULL));

	p1=rand()%30+17;
	q1=rand()%30+15;
	d1=rand()%30+3;
	
	cout<<endl;cout<<endl;
	
	do
	{
	for(int i=2;i*i<=q1;i++)
	if(q1%i==0) q1=rand()%30+15;
	else {q=q1;t++;}
    }
    while(t>0);
    
	t=0;
	
	do
	{
	for(int i=2;i*i<=p1;i++)
	if(p1%i==0) p1=rand()%30+17;
	else {p=p1;t++;}
    }
    while(t>0);
    
    n=p*q;
	fn=(p-1)*(q-1);
	do
	{
	for(int i=2;i*i<=d1;i++)
	{
		for(int j=2;j*j<=n;j++)
		if((d1%i==0)&&(n%j==0)&&(i=j)) d1=rand()%30+3;
	    else {d=d1;t++;}
	}
	
    }
    while(t>0);	
    
	cout<<p<<" "<<q<<" "<<d<<" "<<fn;
	
	double e=1.1,d2;
	int k=0;
	d2=d;
	while((e-floor(e))>0.0)
	{
		k++;
		e=(k*fn+1)/d2;
		
	}
	cout<<endl;
    cout<<endl;
	cout<<endl<<e<<" "<<k;   
	
	int a[100],c[100];
	int e1,l;
	long long w=0;
	e1=e;
		
	for(int i=0;i<strlen(m);i++)
	{
		l=(int)m[i];
		w=pow(l,e1);
		c[i]=w%n;
	}
	
	cout<<"Shifr:"<<endl;
	
	for(int i=0;i<strlen(m);i++)
	{
		cout<<"c"<<i+1<<"="<<c[i]<<endl;;
	}
	
	  
getch();
return 0;
		
}
Так же, у меня неправильно выводит зашифрованные буквы(с[i])..я думаю, что это связано с тем, что w=pow(l,e1); очень большое число. Но мне нужно обязательно, чтобы числа p и q в произведении давали число, большее 255.
krasy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите подправить код Sony_boy Общие вопросы Delphi 4 26.09.2015 22:22
Помогите подправить прошивку variaevg Общие вопросы C/C++ 0 05.11.2013 23:06
помогите подправить программу Deniska112 Общие вопросы C/C++ 6 25.06.2009 15:04
Помогите подправить формулу! Maxx Microsoft Office Excel 5 16.12.2008 13:43