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

📄 rsa.txt

📁 rsa密码算法仅供参考加密解密过程容易 请自己编程
💻 TXT
字号:
#include <stdio.h> 
#include <string.h> 
#include <time.h> 
#include <stdlib.h> 
#include <math.h> 

int str2num(char *str) //字符转数字 
{ 
int i=0,num=0; 

for(i=0;i<(int)strlen(str);i++) 
num=num*10+str[i]-'0'; 
return num; 

} 

float CarmSqrt(float x) //求平方根 系统的太慢,用了别人的 
{ 
union 
{ 
int intPart; 
float floatPart; 
}convertor; 

union 
{ 
int intPart; 
float floatPart; 
}convertor2; 

convertor.floatPart = x; 
convertor2.floatPart = x; 
convertor.intPart = 0x1FBCF800 + (convertor.intPart >> 1); 
convertor2.intPart = 0x5f3759df - (convertor2.intPart >> 1); 
return 0.5f*(convertor.floatPart + (x * convertor2.floatPart)); 
}//可以不用,用sqrt()也可以 

int isPrime(int n) //判断是否为素数 
{ 
int i=0,k=2; 


k=(int)CarmSqrt(n); 
for(i=2;i<=k;i++) 
{ 
if(n%i==0) 
break; 
} 

if(i>k) 
return 1; 
else 
return 0; 

} 

int rnd(int max) //生成随机数 2~max 用来生成e, 
{ //取系统时间做随机数种子 
int range,n; 
int min=2,flag=0; 
time_t t; 
double j; 



range=max-min; 
t=time(NULL); 
srand((unsigned)t); 

n=rand(); 

j=((double)n/(double)RAND_MAX); 

n=(int)(j*(double)range); 
n+=min; 

return n; 


} 

int co_prime(int a ,int b) // 求互质 
{ 
int c; 
do 
{ 
if(b==1) 
return 1; 
c=a%b; 
a=b; 
b=c; 

}while(c!=0); 
return 0; 
} 

void get_d_e(int p,int q) 
{ 
int r,t,e,d,i=2,k=0; 




if(isPrime(p)!=1||isPrime(q)!=1) 
{ 
printf("Invaild Parameters\nshould be PRIME!\n"); 
printf("Usage:RSA Prime1 Prime2\n"); 
exit(0); 
} 


r=p*q; 

t=(p-1)*(q-1); 
e=rnd(t)/10; 
while(co_prime(t,e)!=1) 
{ 
e=e+1; 

} 

for(d=2;d<t;d++) 
{ 
if((e*d)%t==1) 
break; 
} 

printf("d=%d e=%d r=%d\n",d,e,r); 
} 



void en(int n,int e,int r) 
{ 
//加密 
} 

void de(int c,int d,int r) 
{ 
//解密 
} 


void main(int argc,char* argv[]) 
{ 
int n1,n2; 

if(argc!=3&&argc!=5) 
{ 
printf("Invaild Parameters!\n"); 
printf("Usage: \nRSA -e Express e r\n"); 
printf("RSA -d Ciphertext d r\n"); 
printf("RSA Prime1 Prime2\n");//错误输出 
exit(0); 
} 
else 


if(argv[1][0]!='-') 
{ 
n1=str2num(argv[1]); 
n2=str2num(argv[2]); 
get_d_e(n1,n2); 
exit(0); 
} 

else 
if(argv[1][1]=='e') //加密 
{ 
n1=str2num(argv[3]); 
n2=str2num(argv[4]); 
en(str2num(argv[2]),n1,n2); 
exit(0); 

} 

if(argv[1][1]=='d') //解密 
{ 
n1=str2num(argv[3]); 
n2=str2num(argv[4]); 
en(str2num(argv[2]),n1,n2); 
exit(0); 

} 

else{ 
printf("Invaild Parameters!\n"); 
printf("Usage: \nRSA -e Express e r\n"); 
printf("RSA -d Ciphertext d r\n"); 
printf("RSA Prime1 Prime2\n"); 
exit(0); 
} 
} 

⌨️ 快捷键说明

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