欢迎光临散文网 会员登陆 & 注册

【密码学基础】使用欧几里得算法求出RSA算法私钥d

2023-08-17 21:55 作者:铜锣烧爱吃关东煮  | 我要投稿

用C++递归实现UP所讲解辗转相除法(程序很烂,仅供参考)


#include<bits/stdc++.h>

using namespace std;


bool f1=0;//用于判断函数是否第一次调用 

struct node //用于存储函数生成的d,k 

{

unsigned long long d;

unsigned long long k;

bool f;

};


node fd(

unsigned long long e,

unsigned long long r)

{

//用于找到合适的私钥d 

if(f1==1)//如果不是第一次调用 

{

//辗转相除 

if(e>r)e%=r;

else r%=e;

if(e==1)

//假设k=0

return {1,0,0};

if(r==1)

//假设d=1

return {1,e-1,1};

}

else f1=1;

node rfd=fd(e,r);

if(rfd.f==0)

return {rfd.d,((e*rfd.d-1)/r),1};//计算上一个r 

if(rfd.f==1)

return {((1+r*rfd.k)/e),rfd.k,0};//计算上一个e

}


int main()

{

//按顺序输入e,r两个参数 

unsigned long long e,r;

cin>>e>>r;

unsigned long long d;

d=fd(e,r).d;

//输出生成的d以及判断d是否合法 

cout<<"d="<<d<<endl;

cout<<"判断:"<<((d*e)%r==1)<<endl;

system("pause > nul");

return 0;

}


【密码学基础】使用欧几里得算法求出RSA算法私钥d的评论 (共 条)

分享到微博请遵守国家法律