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

📄 rsa.cpp

📁 信息安全相关
💻 CPP
字号:
#include<iostream>
using namespace std;
//可使两个数组具有相同的长度
const int len=4;
unsigned long b=0x10000;
unsigned long u[len];
unsigned long v[len];
unsigned long w[8];

void Add(unsigned long u[len],unsigned long v[len],unsigned long w[len+1]){
	unsigned long k=0;
	for(int j=len-1;j>=0;j--)
	{
		w[j+1]=(u[j]+v[j]+k)%b;
		k=(u[j]+v[j]+k)/b;
	}
	w[0]=k;
	cout<<"相加的结果:"<<endl;
	for(j=0;j<len+1;j++)
		cout<<hex<<w[j]<<" ";
	cout<<endl;
}

void Sub(unsigned long u[len],unsigned long v[len],unsigned long w[len]){
	int k=0;
	for(int j=len-1;j>=0;j--)
	{
		w[j]=(u[j]-v[j]+k)%b;
		k=(u[j]-v[j]+k)/b;
	}
	cout<<"相减的结果:"<<endl;
	for(j=0;j<len;j++)
		cout<<hex<<w[j]<<" ";
	cout<<endl;
}

void Mul(unsigned long u[len],unsigned long v[len],unsigned long w[2*len]){
	unsigned long k=0;
	for(int m=2*len-1;m>=len;m--)
		w[m]=0;
	for(int j=len-1;j>=0;j--){
		if(v[j]==0)
			w[j]=0;
		else
			for(int i=len-1;i>=0;i--){
				unsigned long t;
				t=u[i]*v[j]+w[i+j+1]+k;
				w[i+j+1]=t%b;
				k=t/b;
				if(i==0)
					w[j]=k;
			}		
	}
	cout<<"相乘的结果:"<<endl;
	for(int n=0;n<=2*len-1;n++)
		cout<<hex<<w[n]<<" ";
	cout<<endl;
}

void Div(unsigned long g[len+1],unsigned long c[len],unsigned long q[len+1],unsigned long r[len]){
	unsigned long d;
	unsigned long p;
	unsigned long t;
	unsigned long k=0;
	unsigned long c1[len+1]={0,c[len]};
	unsigned long g1[2*len]={0,g[2*len+1]};
	d=b/(c[0]+1);
   cout<<"d="<<d<<endl;
   for(int i=len;i>=0;i--)
   {
	  t=g[i]*d+k;
      g[i+1]=t%b;
      k=t/b;
	  if(i==0)
          g[i]=k;
   }
   k=0;
   for( i=len-1;i>=0;i--)
   {
	  t=c[i]*d+k;
      c[i]=t%b;
      k=t/b;
   }
	for(int j=0;j<1;j++)
		if(g[j]==c[0])
			p=b-1;
		else
			p=(g[j]*b+g[j+1])/c[0];
			if((c[1]*p)>((g[j]*b+g[j+1]-p*c[0])*b+g[j+2]))
				p=p-1;
			for(int l=len;l>=0;l--){
				t=p*c[l]+k;
	          c1[l+1]=t%b;
              k=t/b;
		      if(l==0)
		      c1[l]=k;
		  }
		  for(i=0;i<=len;i++)
			  cout<<c1[i]<<" ";
		  cout<<endl;
		    q[j]=p;
		    if(g[j+l]<0)
				q[j]-=1;
				g[j+l]=g[j+l]+c[len+1];
			cout<<hex<<q[j];
}

void main(){

	unsigned long q[3];
    unsigned long r[2];
	cout<<"输入第一个大数:";
	for(int i=0;i<len;i++)
		cin>>hex>>u[i];
	cout<<"输入第二个大数:";
	for(int j=0;j<len;j++)
		cin>>hex>>v[j];

	Add(u,v,w);
	Sub(u,v,w);
	Mul(u,v,w);
	Div(u,v,q,r);
}

⌨️ 快捷键说明

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