代码求调
查看原帖
代码求调
681349
ShouZheng_Observer楼主2023/8/4 08:41

以下是我写的一份RSA算法加密和解密的代码,目前可能是加密部分出现了问题,解密出来的和需要传输的信息不一致,有无大佬指出错误,如果是其他部分的问题也欢迎提出,悬关不限,有用即关

#include<bits/stdc++.h>
using namespace std; 
typedef long long ll;
random_device random;
int main();
bool isPrime(int x){
	if(x<=1) return false;
	for(int i=2;i<x;i++) if(x%i==0) return false;
	return true;
}
ll p,q,N,T,E,D=1;//加密·要点生成
ll a;//加密
ll b;//解密
ll RSA_Single(ll x,ll E,ll N){
	ll ans=x;
	for(int i=1;i<E;i++){
		ans*=x;
		ans=ans%N;
		if(ans==0) ans=N;
    }
	return ans;
}
void Encryption(){
	while(1){
		if(!isPrime(p)) p=3+(random()%5);
		if(!isPrime(q)) q=3+(random()%5);
		if(isPrime(p)&&isPrime(q)) break;
	}
	N=p*q;
	T=(p-1)*(q-1);
	while(1){               
		if((isPrime(E)&&((T%E)!=0))) break;
		E++;
	}
	while(1){
		if(((D*E)%T==1)&&(D!=E)) break;
		D++; 
	}
	cout<<"Something:\n秘钥生成:";
	cout<<"\n公钥("<<E<<", "<<N<<")\n私钥("<<D<<", "<<N<<")\n";
	//以上是生成必备的几个数字
	cout<<"Attention:\n在使用过程中\n请把私钥告诉对方(保证只有对方知道)\n而公钥可以被任何人知道\n\n接下来请输入您要加密的内容\n请务必以数字形式呈现\n数之间以空格隔开\n之后点击“Enter”键程序会给出解密后的内容\n如您还需要解密操作\n再次按上述要求输入数字即可\n\n请输入:\n";
	while(cin>>a) cout<<RSA_Single(a,E,N)<<' ';
}
void Deciphering(){
	cout<<"Attention:\n请以“D N”的形式输入私钥\nD和N分别表示私钥的两个数字\n输入:";
	int d,n;
	scanf("%d %d",&d,&n);
	cout<<"\n收到\n请输入加密后的内容\n请务必以数字形式呈现\n数之间以空格隔开\n之后点击“Enter”键程序会给出解密后的内容\n如您还需要解密操作\n再次按上述要求输入数字即可\n\n请输入:\n";
	while(cin>>b) cout<<RSA_Single(b,d,n)<<' ';
}
int main(){
	setlocale(LC_ALL,"chs");
	cout<<"-RSA算法非对称加密-\n请保证您记录好您需要的信息\n如果您发现程序持续三秒以上不给予任何输出\n那么您需要重启程序\n\n请问您需要RSA的加密还是解密功能?\n1.加密  2.解密\n";
	int choose;
	cin>>choose;
	if(choose==1) Encryption();
	else if(choose==2) Deciphering();
	return 0;
}
2023/8/4 08:41
加载中...