RSA加密算法
在老师讲到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; }