当前位置:编程学习 > 网站相关 >>

RSA加密(C语言)

侠客行
实现加密,设p=101,q=103,选择e=79,对任意输入的明文实现加密,如果是字符串,分组长度为2。

#include<stdio.h>
#include<string.h>

int kuaisuqumo(int m,int e,int n)
{
    int i,j,t=0,c=1,b[15],len=0;
    for(i=0;e!=0;i++)
    {
        b=e%2;
        e=e/2;
        len++;
    }
    for(j=i-1;j>=0;j--)
    {
         t=2*t;
         c=(c*c)%n;
         if(b[j]==1)
         {
            t+=1;
            c=(c*m)%n;
         }
    }
    return c;
}

main()
{
        char m0[1000]={},str;
        int i,j,len,length,m,n,n1,d=0,m1[1000];
        int p=101,q=103,e=79;
        printf("请输入明文:");
    i=0;
    while((m0=getchar())!=n)
    i++;
    m0=;
    length=strlen(m0);
    for(i=0;i<length;i++)
    m1=int(m0);

        n=p*q;
        n1=(p-1)*(q-1);
        while(d*e%n1!=1)
           d++;
    printf("公钥(n,e):(%d,%d)n",n,e);
    printf("私钥(p,q,d):(%d,%d,%d)n",p,q,d);
    len=strlen(m0);

        if(length%2==1)
        {
       printf("字符分组为2,请输入添加字符,构成分组:");
       scanf("%c",&str);
       m1[len]=int(str);
       m1[len+1]=;
       len+=1;
           }
    printf("字符换的ASCLL码:n");
    for(i=0;i<len;i++)
     {
             printf("%d ",m1);
     }
        int c[500],k=0,k1;
   printf("n");
   printf("加密n");
   for(j=0;j<len;j+=2)
   {
             m=m1[j]*100+m1[j+1];
            c[k]=kuaisuqumo(m,e,n);
            printf("%d ",c[k]);
            k++;
   }
   printf("n");
   printf("解密n");
   for(k1=0;k1<k;k1++)          
   printf("%d ",kuaisuqumo(c[k1],d,n));
   printf("n");               
}
\

补充:综合编程 , 安全编程 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,