📄 rsa.cpp
字号:
// rsa.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <math.h>
void main()
{
long p,q,n,t,e,d,i;
/*定义明文的长度及内容*/
char mingwen[50] = {"aba"};
long jiamiwenzi[50];
char jiemiwenzi[50];
p=149,q=193;
n=p*q;
t=(p-1)*(q-1);
/*取得 e*/
i=2;
while(1)
{
long a=t,b=i,c;
a,b=t>i?t,i:i,t;
while(1)
{
if(b==0) break;
c=a%b;
a=b;
b=c;
}
if(a==1)
{
e=i;
break;
}
i++;
}
/*取得 d*/
i=1;
while(1)
{
if((t*i+1)%e==0)
{
d=(t*i+1)/e;
break;
}
i++;
}
/*输出数据与明文*/
printf("p,q,n,e,d: %d,%d,%d,%d,%d\n",p,q,n,e,d);
printf("明文: %s\n",mingwen);
/*加密*/
for(i=0;i<50;i++)
{
long a=e,b=1,c;
for(c=mingwen[i];a>0;a>>=1)
{
if(a%2==1) b=(b*c)%n;
c=(c*c)%n;
}
jiamiwenzi[i]=b;
}
/*十六进形式输出密文*/
printf("密文: ");
for(i=0;i<50;i++)
printf("%x",jiamiwenzi[i]);
/*解密*/
for(i=0;i<50;i++)
{
long a=d,b=1,c;
for(c=jiamiwenzi[i];a>0;a>>=1)
{
if(a%2==1) b=(b*c)%n;
c=(c*c)%n;
}
jiemiwenzi[i]=b;
}
/*输出解密后的消息*/
printf("\n解密后的密文: %s\n",jiemiwenzi);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -