📄 rsa.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 + -