【信息安全】RSA非对称加密算法原理(详解和C++代码实现)

本文深入探讨了RSA非对称加密算法的原理,包括选择素数、计算欧拉函数、求逆元等步骤,并提供了C++代码实现加密解密过程。通过示例展示了RSA算法的工作机制,证明了其正确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.RSA非对称加密

(1)选择两个素数p和q ,计算n=p*q和欧拉函数φ(n)=(p-1)(q-1),选择整数e,使gcd(φ(n), e)=1(即φ(n)和e是互素),1<e<φ(n);

(2)计算e的逆元d=e-1mod φ(n)(即ed = 1 mod φ(n));

(3)得到公钥Kpub={e, n},私钥Kpri={d, n}(公开公钥Kpub ,保密私钥Kpri );

(4)加密(使用公钥Kpub):对于明文m<n,密文c=me mod n ;

(5)解密(使用私钥Kpri):对于密文c,明文m=cd mod n

2.RSA加解密示例
在这里插入图片描述
3.RSA正确性证明
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
4.代码实现(c++)

#include <iostream>
using namespace std;

// 最大公因数
int maxCommonDivisor(int a, int b)
{
	int temp = a;
	if (a < b)
	{
		a = b;
		b = temp;
	}

	while(a % b)
    {
		temp = b;
		b = a % b;
		a = temp;
	}
	return b;
}

// 最小公倍数
int leastCommonMultiple(int a, int b)
{
	int macDivisor = maxCommonDivisor(a, b);
	return a / macDivisor  *  b;
}

// 计算 input ^ rate mod y
int multiMod(int input, int rate, int y)
{
	int start = 1;
	int arr[100];
	arr[0] = 1;
	arr[1] = input;
	int step = 1;
	int result = 1;

	while(rate)
    {
		if (step == 1)
		{
			arr[step] = input;
		}
        else
        {
			arr[step] = arr[step - 1] * arr[step - 1];
			arr[step] %= y;
		}
		if(rate&1)
		{
			result *= arr[step];
			result %= y;
		}
		step ++;
		rate = rate >> 1;
	}

	return result;
}

int main()
{
	int input;
	int p, q;
	int N, L, E, D;

	while(cin >> p >> q >> input >> E)
    {
		N = p * q;
		//最小公倍数
		L = leastCommonMultiple(p - 1, q - 1);
		//E * D mod L = 1
		int X = 1;
		while((X * L + 1) % E)
		{
			X ++;
		}

		D = (X * L + 1) / E;
		cout<<"N = " << N << "  L = " << L << " E = " << E << "  D = " << D << "  X = " << X <<endl;
		// 加密过程
		int code = multiMod(input, E, N);
		// 解密过程
		int deCode = multiMod(code, D, N);
		cout<< "code = " << code << "  deCode = " << deCode << endl;
	}
}

在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值