在老师讲到RSA算法时写的,主要用于解题:
#include <stdio.h> #include <windows.h> bool Prime(int t); \\判断传入的值是否是素数 void D(int &d, int &z); \\计算出d的值 void E(int &e, int d, int z); \\计算出e的值 void K(int &k, int n); \\计算出k的值 int Squ(int t); \\返回2的t次方 int main(void) { int p, q; int n, z; int d; int e; int k; printf("请输入p和q(以空格号分隔):"); scanf("%d %d", &p, &q); if(Prime(p)==NULL || Prime(q)==NULL) { printf("两个数中存在非素数!\n"); return 0; } n = p*q; z = (p - 1)*(q-1); printf("n=%d*%d=%d, z=(%d-1)*(%d-1)=%d\n", p, q, n, p, q, z); D(d, z); printf("d=%d\n", d); E(e, d, z); printf("e=%d\n", e); printf("公钥:(%d,%d)\n私钥:(%d,%d)\n", e, n, d, n); K(k, n); printf("k=%d\n", k); printf("\n作者:方海峰\nBUG联系QQ:2579881587\n"); system("pause"); return 0; }
其他的自己写的函数:
bool Prime(int t)
{
int a = t / 2;
for(int b = 2; b <= a; ++b)
{
if(t%b==0)
{
return false;
}
}
return true;
}
void D(int &d, int &z)
{
d = 5;
while(1)
{
for(int t = 2; t <= z; ++t)
{
if(d%t ==0 && z%t==0)
{
break;
}
if(t == z)
{
return ;
}
}
d += 2;
}
}
void E(int &e, int d, int z)
{
for(int t = 1; 1; ++t)
{
if((t*z+1)%d==0)
{
e = (t*z+1)/d;
return;
}
}
return;
}
void K(int &k, int n)
{
for(int t = 1; 1; ++t)
{
k = t;
if(Squ(t)>n)
{
return;
}
}
return;
}
int Squ(int t)
{
int sum = 2;
for(int a = 0; a < t; ++a)
{
sum *= 2;
}
return sum;
}