📄 get_e_d.cpp
字号:
//产生密钥
float CarmSqrt(float x) //求平方根
{
union
{
int intPart;
float floatPart;
}convertor;
union
{
int intPart;
float floatPart;
}convertor2;
convertor.floatPart = x;
convertor2.floatPart = x;
convertor.intPart = 0x1FBCF800 + (convertor.intPart >> 1);
convertor2.intPart = 0x5f3759df - (convertor2.intPart >> 1);
return 0.5f*(convertor.floatPart + (x * convertor2.floatPart));
}
int isPrime(int n) //判断是否为素数
{
int i=0,k=2;
k=(int)CarmSqrt(n);
for(i=2;i<=k;i++)
{
if(n%i==0)
break;
}
if(i>k)
return 1;
else
return 0;
}
int co_prime(int a ,int b) // 求互质
{
int c;
do
{
if(b==1)
return 1;
c=a%b;
a=b;
b=c;
}
while(c!=0);
return 0;
}
int rnd(int max) //生成随机数 2~max 用来生成e,
{ //取系统时间做随机数种子
int range,n;
int min=2,flag=0;
time_t t;
double j;
range=max-min;
t=time(NULL);
srand((unsigned)t);
n=rand();
j=((double)n/(double)RAND_MAX);
n=(int)(j*(double)range);
n+=min;
return n;
}
int r,e,d;
int get_e_d(int p,int q)
{
int t,n;
r=p*q;
t=(p-1)*(q-1);
n=rnd(t);
printf("n=%d\n",n);
e=n/10;
while(co_prime(t,e)!=1)
{
e=e+1;
}
for(d=2;d<t;d++)
{
if((e*d)%t==1)
break;
}
return r,e,d;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -