rsa初步

不是很理解原理,先运行代码熟悉下是个什么玩意。







#if 0
RSA算法的C语言实现 一、RSA算法的描述 1、选取长度相等的两个大素数p和q,计算其乘积:
 n=pq 然后随机选取加密密钥e,使e和(p–1)(q–1)互素。最后用欧几里德扩展算法计算解密密钥d,
 以满足 ed=1(mod(p–1)(q–1)) 即d=e–1mod((p–1)(q–1))e和n是公钥,d是私钥2、加密公式如下: 
 ci=mi^e(modn)
 3、解密时,取每一密文分组ci并计算: 
 mi=ci^d(modn) Ci^d=(mi^e)^d=mi^(ed)=mi^[k(p–1)(q–1)+1] =mimi^[k(p–1)(q–1)]=mi*1=mi 
 4、消息也可以用d加密用e解密 二、C源程序 
#endif






 //RSA算法的C程序实现
#include<stdio.h>




//数据处理函数,实现幂的取余运算 
int candp(int a,int b,int c)
{
int r=1;
b=b+1;
while( b != 1 ){ 
 r=r*a;
 r=r%c;
 b--;

printf("%d\n",r);
return r;
}   
    
//公钥e与t的互素判断 
int fun( int x, int y )
{   
int t; 
    while( y ){        
 t = x;
 x = y;
 y = t%y;

if( x == 1 ){
return 0;
   //x与y互素时返回0
}else{
return 1;
   //x与y不互素时返回1 
}
}












void main1(void)
{
candp(2,2,3);
fun(9,33);


}




 
void main(void)
{
     int p,q,e,d,m,n,t,c,r; 
printf("请输入两个素数p,q:");
scanf("%d%d",&p,&q);
n=p*q; 
printf("计算得n为%3d\n",n);
t=(p-1)*(q-1);
//求n的欧拉数
printf("计算得t为%3d\n",t);
printf("请输入公钥e:");
scanf("%d",&e);
if(e<1||e>t||fun(e,t)){
printf("e不合要求,请重新输入:");
//e<1或e>t或e与t不互素时,重新输入
scanf("%d",&e);
}
d=1; 
while(((e*d)%t)!=1)
d++;
//由公钥e求出私钥d
printf("经计算d为%d\n",d);
printf("加密请输入1\n");
//加密或解密选择
printf("解密请输入2\n");
scanf("%d",&r);
switch(r)

       case 1:
  printf("请输入明文m:");
  //输入要加密的明文数字 
  scanf("%d",&m);
  c=candp(m,e,n); 
  printf("密文为%d\n",c);
  break; 
        case 2:
printf("请输入密文c:");
//输入要解密的密文数字 
scanf("%d",&c); 
m=candp(c,d,n); 
printf("明文为%d\n",m);
break; 
}


}

你可能感兴趣的:(rsa初步)