{\rtf1\ansi\ansicpg1252\deff0\deflang1033{\fonttbl{\f0\fswiss\fcharset0 Arial;}}
{\*\generator Msftedit 5.41.15.1515;}\viewkind4\uc1\pard\f0\fs20 #include<iostream.h>\par
#include<stdio.h>\par
#include<stdlib.h>\par
#include<string.h>\par
#include<conio.h>\par
#include<math.h>\par
#include<process.h>\par
\par
class RSA\par
\{\par
public:\par
int pr1,pr2,x1,n,n1;\par
int e,d,pt;\par
int a[20],b[10];\par
int len; //binary array length\par
\par
RSA();\par
\par
//Miller & Rabin Algorithm--Test for Primality\par
void testprimality();\par
\par
//PseudoRandom Number Generator Algorithm\par
void pseudo1();\par
int pseudo2();\par
\par
//Relatively Prime--Euclid's Algorithm\par
//GCD of two numbers-their common factor is '1'\par
void relprime();\par
int gcd(int c,int d);\par
\par
//Key Generation\par
int keygenerate1(int ptext);//for Encryption\par
int keygenerate2(int ctext);//for Decryption\par
void decitobin(int x);\par
\par
//Encryption\par
int encrypt(int num);\par
\par
//Decryption\par
int decrypt(int ctext);\par
\par
\par
\par
\};\par
\par
\par
//Interface File--RSA Application\par
//Miller & Rabin Algorithm--Test for Primality\par
//PseudoRandom Number Generator Algorithm\par
//Relatively Prime--Euclid's Algorithm\par
\par
#include"rh1.h"\par
\par
RSA::RSA()\par
\{\par
x1=1;\par
pr1=0;\par
pr2=0;\par
\}\par
\par
//Miller & Rabin Algorithm--Test for Primality\par
\par
void RSA::testprimality()\par
\{\par
int a,j,p1,q,x;\par
int t1,t2;\par
\par
int k,flag,ch;\par
\par
ch=1;\par
flag=0;\par
k=0;\par
\par
//(n-1)=pow(2,k)*q\par
//divide (n-1) by 2 until result is odd number\par
\par
while(ch)\par
\{\par
x=(n-1)/(int)(pow(2,k));\par
if(fmod(x,2)==1)\par
\{\par
ch=0;\par
break;\par
\}\par
\par
k++;\par
\}\par
\par
q=(int)((n-1)/(pow(2,k)));\par
\par
//to pick an integer randomly which\par
//should be less than 'n';\par
//That's why calling pseudo2()\par
a=pseudo2();\par
\par
if(a>1 && a<(n-1))\par
\{\par
t1=(int)(pow(a,q));\par
\par
if((t1%n)==1)\par
flag=1;\par
else\par
\{\par
\par
for(j=0;j<=(k-1);j++)\par
\{\par
p1=((int)(pow(2,j)))*q;\par
t2=(int)pow(a,p1);\par
\par
if((t2%n)==(n-1))\par
flag=1;\par
\par
\}\par
\}\par
\}\par
\par
if(flag==1)\par
if(pr1==0)\par
pr1=n;\par
else if(pr1!=0 && pr2==0)\par
pr2=n;\par
\par
\}\par
\par
//PseudoRandom Number Generator Algorithm\par
\par
void RSA::pseudo1()\par
\{\par
//to select 'n' pseudorandomly and pass to testprimality();\par
//'n' is to be proved either prime or not prime\par
\par
int a,c,y;\par
unsigned int m;\par
\par
y=0;\par
\par
a=(int)pow(7,5); //(7,2),*(7,4),(7,5)\par
//(int)pow(7,5) used in IBM 360\par
\par
//m should be assigned a "prime" no.\par
//up to pow(2,31) should be used.\par
//(2,5)-1;(2,7)-1;(2,13)-1;\par
//(2,17)-1;(2,19)-1;(2,31)-1 are primes\par
\par
m=((int)pow(2,7))-1; //(2,7)\par
\par
n=1;c=0;\par
\par
for(int i=0;i<50;i++)\par
\{\par
n=((a*n)+c)%m;\par
testprimality();\par
//n will be computed in textprimality()\par
\}\par
\par
// cout<<"\par
pr1 = "<<pr1;\par
// cout<<"\par
pr2 = "<<pr2;\par
\}\par
\par
int RSA::pseudo2()\par
\{\par
//to pick an integer randomly which\par
//should be less than 'n'\par
\par
int a,ret;\par
unsigned int m;\par
\par
a=(int)pow(7,4); //(7,3),*(7,4) for a's (7,5)in pseudo1\par
m=(int)pow(2,5)-1; //(2,5)\par
\par
ret=(a*x1)%m;\par
x1=ret;\par
\par
return ret;\par
\par
\}\par
\par
//Relatively Prime--Euclid's Algorithm\par
//GCD of two numbers-their common factor is '1'\par
void RSA::relprime()\par
\{\par
\par
//Finding 'e' & 'd' value\par
int fin,ret,ret1,ret2,ch,ex,dx;\par
\par
ch=1;ex=2;dx=1;\par
n1=pr1*pr2;\par
\par
fin=(pr1-1)*(pr2-1);\par
\par
//Finding 'e' alone\par
x1=1; //for pseudo2\par
\par
while(ch)\par
\{\par
ex=pseudo2();\par
if(ex>1 && ex<fin)\par
\{\par
ret1=gcd(ex,fin);\par
ret2=gcd(fin,(ex%fin));\par
if(ret1==1 && ret2==1)\par
\{\par
e=ex;\par
ch=0;\par
break;\par
\}\par
\}\par
\par
\}\par
\par
// cout<<"\par
Relative Prime : e value: "<<e;\par
\par
//Finding 'd' alone\par
//de=(1 mod fin) where fin=(pr1-1)*(pr2-1);\par
ch=1;\par
while(ch)\par
\{\par
ret=(e*dx)%fin;\par
if(ret==1)\par
\{\par
d=dx;\par
ch=0;\par
break;\par
\}\par
dx=dx+1;\par
\par
\}\par
\par
// cout<<"\par
d value : "<<d;\par
\}\par
\par
int RSA::gcd(int c,int d)\par
\{\par
int r;\par
\par
r=d%c;\par
\par
while(r!=0)\par
\{\par
d=c;\par
c=r;\par
r=d%c;\par
\}\par
\par
return c;\par
\}\par
\par
int RSA::keygenerate1(int ptext)\par
\{\par
//Encryption\par
int i,c;\par
int entext;\par
\par
c=0;entext=1;\par
\par
decitobin(e); //public key with 'e'\par
//b[]->array contains binary value of 'e'\par
\par
for(i=len;i>=0;i--)\par
\{\par
c=2*c;\par
entext=(entext*entext)%n1; //187->n1\par
if(a[i]==1)\par
\{\par
c=c+1;\par
entext=(entext*ptext)%n1; //187->n1\par
\}\par
\}\par
\par
// cout<<"\par
Encrypted 'c' : "<<c;\par
return entext;\par
\}\par
\par
int RSA::keygenerate2(int ctext)\par
\{\par
\par
//Decryption\par
int i,dntext,c;\par
dntext=1;\par
c=0;\par
\par
decitobin(d); //Private Key with 'd'\par
//b[]->array contains binary value of 'd'\par
\par
\par
for(i=len;i>=0;i--)\par
\{\par
c=2*c;\par
dntext=(dntext*dntext)%n1;\par
\par
if(a[i]==1)\par
\{\par
c=c+1;\par
dntext=(dntext*ctext)%n1;\par
\}\par
\par
\}\par
\par
// cout<<"\par
Decrypted 'c' := "<<c;\par
\par
return dntext;\par
\}\par
\par
\par
void RSA::decitobin(int x)\par
\{\par
int k,i=0;\par
\par
while(x>0)\par
\{\par
a[i]=x%2;\par
i++;\par
x=x/2;\par
\}\par
\par
//when exit from above loop, i value is incremented by 1\par
k=i-1;\par
\par
len=i-1;\par
\}\par
\par
\par
int RSA::encrypt(int num)\par
\{\par
int ctext,i;\par
\par
pt=num;\par
ctext=keygenerate1(num);\par
\par
return(ctext);\par
\}\par
\par
int RSA::decrypt(int ctext)\par
\{\par
int dectext,i;\par
\par
dectext=keygenerate2(ctext);\par
\par
return(dectext);\par
\par
\}\par
\par
\par
\par
\par
//Application File--RSA Application\par
//Miller & Rabin Algorithm--Test for Primality\par
//PseudoRandom Number Generator Algorithm\par
//Relatively Prime--Euclid's Algorithm\par
\par
#include"rh1.h"\par
#include<stdio.h>\par
\par
void main()\par
\{\par
int i,det,det1,len,k,k1,cnt;\par
int con=0,c;\par
char ch[100],cipher[20],orig[20];\par
\par
RSA r;\par
c=1;\par
\par
cout<<endl<<endl;\par
for(i=0;i<70;i++)\par
cout<<'*';\par
cout<<"\par
RSA APPLICATION<BR>;\par
for(i=0;i<70;i++)\par
cout<<'*';\par
cout<<endl;\par
\par
\par
r.pseudo1();\par
r.relprime();\par
\par
cout<<"\par
\par
Enter the String : ";\par
cnt=0;\par
char chr;\par
\par
scanf ( "%[^\par
]s", ch ) ;\par
\par
\par
len=strlen(ch);\par
k=0;k1=0;\par
\par
for(i=0;i<len;i++)\par
\{\par
con=(int)ch[i];\par
det=r.encrypt(con);\par
cipher[k]=char(det);\par
k++;\par
det1=r.decrypt(det);\par
orig[k1]=char(det1);\par
k1++;\par
\}\par
\par
cipher[k]='\par
}
http://en.pudn.com/downloads72/sourcecode/crypt/detail263990_en.html
rsa.rar_RSA encryption _rsa_rsa c++
版权申诉
56 浏览量
2022-09-23
10:24:06
上传
评论
收藏 2KB RAR 举报
邓凌佳
- 粉丝: 65
- 资源: 1万+
最新资源
- keil2 + proteus + 8051.exe
- 1961ee27df03bd4595d28e24b00dde4e_744c805f7e4fb4d40fa3f695bfbab035_8(1).c
- mediapipe-0.9.0.1-cp37-cp37m-win-amd64.whl.zip
- windows注册表编辑工具
- mediapipe-0.9.0.1-cp37-cp37m-win-amd64.whl.zip
- 校园通行码预约管理系统20240522075502
- 车类型数据集6250张VOC+YOLO格式.zip
- The PyTorch implementation of STGCN.STGCN-main.zip
- 092300108.cpp
- 车类型数据集6000张VOC+YOLO格式.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈