void main()
{
unsigned int p,q;
unsigned int e,d,m,u;
unsigned int G,H;
label_1: printf("请输入所选素数 p 和 q:\n");
scanf("%d\n%d",&p,&q); //输入设定的两素数
if (ifprime(p)) printf("已验证 p 为素数\n");
else {printf("p 不为素数,请重新输入 p 和 q\n"); goto label_1;} //验证 p 是否为素数
if (ifprime(q)) printf("已验证 q 为素数\n");
else {printf("q 不为素数,请重新输入 p 和 q\n"); goto label_1;} //验证 q 是否为素数
G=(p-1)*(q-1); //求 p*q 得欧拉数
printf("求得 p*q 的欧拉数 G 为%d\n",G);
H=p*q; //求 p*q 的乘积
printf("求得 p*q 乘积 H 为%d\n",H);
label_2: printf("请输入密钥 e:");
scanf("%d",&e); //输入密钥 e
if (muprime(G,e)) printf("已验证 e 与 G 互素\n");
else {printf("e 与 G 不互素,请重新输入 e\n"); goto label_2;}//验证 e 与 G 是否互素
for(m=1;m>=1;m++)
{
d=(m*G+1)/e;
if(e*d==m*G+1) break;
} //求密钥 d
printf("求得密钥 d 为%d\n",d);
if (muprime(G,d)) printf("已验证 d 与 G 互素\n");
else {printf("d 不为素数,请重新输入 e\n"); goto label_2;} //验证 d 与 G 是否互素
//把密钥 e 转换为二进制存入数组中,这里定义二进制长度最大为 16 位,可根据需要
增加位数
int i; int b[16];
for(i=15;i>=0;i--) {b[i]=e%2; e/=2; }
printf("将 e 转换为二进制为%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n",
b[0],b[1],b[2],b[3],b[4],b[5],b[6],b[7],b[8],b[9],b[10],b[11],b[12],b[13],b[14],b[15]);
//把密钥 d 转换为二进制存入数组中,这里定义二进制长度最大为 16 位,可根据需要
增加位数
int j;int c[16];
for(j=15;j>=0;j--) {c[j]=d%2; d/=2; }
printf("将 d 转换为二进制为%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d\n",