#include<windows.h>
#include<stdio.h>
int len;
main()
{
void RSA_on(char *str);
void RSA_off(char *str);
char str[255]="1684654asdfasdf:51jkhkjdfgdfgsdfhsdfhdfsg1234567890";
len=strlen(str);
RSA_on(str);
printf("加密后数据:%s\n",str);
RSA_off(str);
printf("解密后数据:%s\n",str);
return 0;
}
int MOD(int x,int y,int z)//积模分解
{
if(y==1)
return x%z;
else
return (MOD(x,y/2,z)*MOD(x,y-y/2,z))%z;
}
void RSA_on(char *str)//RSA加密算法
{
int p=13,q=19,M=71,i;//P Q为相异质数,M与12*18=216互质
for(i=0;i<len;i++)
{
*(str+i)=(char)MOD((BYTE)*(str+i),M,p*q);
}
}
void RSA_off(char *str)//RSA解密算法
{
int p=13,q=19,R=143,i;//(R*M)%216==1
for(i=0;i<len;i++)
{
*(str+i)=(char)MOD((BYTE)*(str+i),R,p*q);
}
}
/*#include<windows.h>
#include<stdio.h>
void main()
{
int R,PQ=216,M,a,b,c;
for(R=3;R<1000;R++)
{
a=R;
b=PQ;
do
{
if(b==1)
break;
c=a%b;
a=b;
b=c;
}while(c!=0);
if(b==1)
{
for(M=3;M<1000;M++)
{
if((R*M)%PQ==1)
{
printf("R:%d M:%d\n",R,M);
system("pause");
}
}
}
}
}
*/