RSA加密算法(未完成)
来源:互联网 发布:电脑淘宝网官方下载 编辑:程序博客网 时间:2024/05/19 01:07
#include <iostream>#include <time.h>struct EuclidRetVal//扩张Euclid算法用的返回值类型{long x;long y;long d;};class RSA{public:long N,NT;long e;long mMessage;RSA(){N=0;e=3;}long modexp(long x,long y,long N) //模的指数运算{if(y==0) return 1;long z=modexp(x,y/2,N);//计算机中整形数相除,结果必定为向下取整//if (y%2==0) return (z*z)%N;//elsereturn (x*z*z)%N;if (y%2==0) {long modn=(z*z)%N;if(modn<0) return N+modn;elsereturn modn;}else{long modn=(x*z*z)%N;if(modn<0) return N+modn;else return modn;}}EuclidRetVal extend_Euclid(long a,long b)//扩展Euclid算法,a>b{if (b==0){EuclidRetVal temp;temp.x=1,temp.y=0,temp.d=a;return temp;}EuclidRetVal temp=extend_Euclid(b , a%b);long tempval=temp.x-(a/b)*temp.y;temp.x=temp.y;temp.y=tempval;return temp;//(y,x-a/b*y,d)}void CreateTwoPrime(int n){do{srand((int)time(0));p=createRndPrime(n);q=createRndPrime(n);//p=5,q=11;//p=29,q=23;N=p*q;NT=(p-1)*(q-1);xyd=extend_Euclid(NT,e); //}while( xyd.d!=1 );//直到NT与e素为止if(xyd.y<0)d=NT+xyd.y;//小于0时,这样计算得来的d与x模NT同余,因此是e的逆元elsed=xyd.y;}void show(){std::cout<<"p,q,N,NT的值:"<<std::endl;std::cout<<p<<" "<<q<<" "<<N<<" "<<NT<<std::endl;std::cout<<"XYD的值:"<<std::endl;std::cout<<xyd.x<<" "<<xyd.y<<" "<<xyd.d<<std::endl;std::cout<<"密钥d的值:"<<std::endl;std::cout<<d<<std::endl;std::cout<<"加密后的值:"<<std::endl;std::cout<<mMessage<<std::endl;}void Encrypt(long x) //用公钥加密,加密后保存在mMessage{mMessage=modexp(x,e,N);}long Deciphering(){return modexp(mMessage,d,N);}private:long p,q;long d;EuclidRetVal xyd;long PublicKey(long NT){long e;for(int i=3;i<NT;i++){if(NT%i!=0)int a;}return e;}bool isPrime(long a){ //if( a == -1 ) return false;//int i=2;//long sqr=sqrt(double(a));//for(;i<=sqr;i++)//{//if(a%i==0) break;//}//if(i>sqr)//return true;//else//return false;if ( modexp(2,a-1,a)==1 ) //费马测试,有很小概率出错return true;elsereturn false;}long createRndInteger(int n){if (n<=1) return -1;long RandomNum=1<<(n-1);RandomNum += rand()%RandomNum;return RandomNum;}long createRndPrime(int n){long nRandom;do{nRandom=createRndInteger(n);}while(!isPrime(nRandom));return nRandom;}};void main(){RSA temp;int i;std::cout<<"输入要加密的内容:";std::cin>>i;temp.CreateTwoPrime(5);temp.Encrypt(i);temp.show();long tt=temp.Deciphering();std::cout<<tt<<std::endl;}
无法解密,如下图中最下数字为解密后数据;
,,,,
0 0
- RSA加密算法(未完成)
- RSA 加密算法
- RSA加密算法
- rsa加密算法
- RSA加密算法
- Rsa加密算法
- RSA加密算法
- RSA加密算法
- RSA加密算法
- rsa加密算法
- 加密算法:RSA
- RSA加密算法
- RSA加密算法
- RSA加密算法
- RSA 加密算法
- RSA 加密算法
- RSA加密算法
- RSA加密算法
- JAVA中的泛型
- 傅里叶变换的物理意义
- LATEX错误「Unknown graphics extension: .eps」
- 随机产生一个mbit为的长整数
- ASP.NET-FineUI开发实践-1
- RSA加密算法(未完成)
- iOS UITableView(UIScrollView)滑动到底部的判断
- php中3DES加密技术
- 浙大2013复试:PAT 1056. Mice and Rice (25)
- 学习---关于图像特征提取
- 关于jetty
- HttpModule201403更新
- 算法--第二次作业
- hdu 4610 Cards (贪心+暴力)