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;
}

  

posted @ 2016-04-18 22:42  静梦亭  阅读(215)  评论(0编辑  收藏  举报