rsa.cpp

来自「rsa算法C语言实现,自己编的,希望对大家有借鉴.」· C++ 代码 · 共 81 行

CPP
81
字号
// 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 + =
减小字号Ctrl + -
显示快捷键?