⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rsa.cpp

📁 RSA加密与解密算法的 C++实现
💻 CPP
字号:
#include "stdafx.h"
#include "rsa.h"

bool rsa::set_pqde( int m_in, int e_in )
{
	e=e_in;
	m=m_in;
	p=depart(m_in);
	q=m_in/p;
	if(p==1 || p==2 || !prime(q) ) 
	{
		return false;
	}
	//2
	n=(p-1)*(q-1);
	d=n/e;
	while( ( (e*d)%n )!=1 ) d++;
	//3
	max=m_in;
	while( max<maxint ) max+=m_in;
	max=max-m_in;
	return true;
}
int rsa::encry( int ch )		//加密
{
	return rsaencry( ch, e, m );
}
int rsa::decode( int ch )		//解密
{
	return rsadecode( ch, d, m
		);
}
bool rsa::prime( int x )
{
	int i;
	if (x==1)	return false;    //合数
	if (x==2)	return true;     //素数
	if ( !(x%2) )  return false;
	for(i=3;i<=sqrt(x);i+=2)
	{
		if(!(x%i)) return false; 
	}		
	return true;
}

int rsa::depart( int x )
{
	int i;
	if(prime(x)) return 1;  //X是素数
	if(!(x%2)) return 2;	//X是偶数
	i=3;
	while(x%i)
	{
		i++;
	}
	return i;
}

int rsa::rsaencry(int x,int y,int m )
{
	int yy,li;
	double l;
	if( y==1 ) return x%m;
	
	yy=y%2;		//分几偶数
	if( yy==0 )
	{
		l=rsaencry(x,y/2,m);
		l=l*l;
		while( l>maxint ) l=l-max;
		li=(int)l;
		return li%m;
	}
	else
	{
		l=rsaencry(x,y-1,m);
		l=l*x;
		while( l>maxint ) l=l-max;
		li=(int)l;
		return li%m;
	}
}
int rsa::rsadecode(int x,int y,int m)
{
	int x1=x,y1=y,f1=1;
	while(y1!=0)
	{
		while(y1%2==0)
		{
			y1=y1/2;
			x1=ff(x1,x1,m);
		}

		y1=y1-1;
		f1=ff(f1,x1,m);
	}
	return f1;
}
int rsa::ff(int a,int b,int r)
{
	int sum,i;
	if((maxint/a)>=b)
		return (a*b)%r;
	sum=a;
	i=1;
	while(i<b)
	{
		while(sum>=r)
		{
			sum=sum-r;
		}
		sum=sum+a;
		i=i+1;
	}
	return sum%r;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -