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

📄 rsa.cpp

📁 进行RAS的加密计算
💻 CPP
字号:
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "conio.h"
#include "math.h"
#include "iostream.h"


    int Getzhishu(int a)
	{
        int b,i,c,t;
		int f=1;
		do{
		srand(time(NULL));
		i=rand()%100;
		b=i;
	    c=a;
		//辗转相除法
		while(t=c%b)
		{
			c=b;b=t;
		}
		if(b==1) f=0;
		}while(f!=0);
		return i;
	 }

	int Getd(int a,int b)
	{
       int t=b,i;
	   t=t+1;
       i=t%a;
       while(i)
	   {
		 t=t+b;
         i=t%a; 
	   }
	   
      return(t/a);
	}

     long int Getvalues(long int i,long int k,int n)
{
  long int results=1;
  //底数
  long int im=i;
  //指数
  long int ik=k;
  //把k以2进制的形式进行移位相乘做迭代
  while(ik)
  {
    //当前的最低位是否为1(就是判断是否是奇数),是将计算一次乘积
    if(ik&1) results=(results*im)%n;
    //高位右移,即指数除以了2
    ik>>=1;
    //做一次二次方,一直到指数最高位为0为止 
	im=(im*im)%n;
  }
  return results;
}




	void main()
	{
     //p,q为两个大素数
	int p=73;
	int q=79;
    
    //得到公钥n
 	int n=p*q;
	int r=(p-1)*(q-1);
    
    
     int e,d;
	 //得到公钥e
     e=Getzhishu(r);
	 printf("公钥为e=%d,n=%d\n",e,n);
     //得到秘钥d
     d=Getd(e,r);
	 printf("秘钥为d=%d\n",d);

	 printf("请输入明文:\n");
	 
     int c,i;
	 int a[100];
	 i=0;
     while ((c=getchar())!='\n')
	 {  
		 a[i]=c; 
           i=i+1;
	 }
     
     //加密
     printf("\n");
     printf("加密后为\n");
     long int b[100];
	 for(int j=0;j<i;j++)
	 {b[j]=Getvalues(a[j],e,n);
	 printf("%c",b[j]);
	 }
     
	 //解密
     printf("\n");
     printf("解密后为\n");
     long int s[100];
     printf("\n");
	 for(int k=0;k<i;k++)
	 {s[k]=Getvalues(b[k],d,n);
	 printf("%c",s[k]);
	 }
	  
}

⌨️ 快捷键说明

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