RSA(note)应用密码学第二次作业(9.25)

Basic steps of RSA algorithm

  1. The steps to generate the public key PK and private key SK are as

    follows:

  2. Randomly choose two large prime numbers P and Q. P is not equal to

    Q.

  3. Multiply the two prime numbers P and Q to get an N, that is, N=PQ

  4. Subtract one from P and Q respectively, and then multiply them

    together to get a number T, that is, T = (Q-1) * (P-1)

  5. Choose an integer E as a key so that E and T are relatively prime (

    the greatest common divisor of E and T is 1), and E must be less

    than T

  6. According to the formula DE mod T = 1, the value of D is calculated

    as another key

  7. Through the above steps, the three data N, E, and D can be found,

    where (N, E) is the public key and (N, D) is the private key.

Encrypt information with public key

Plain text: M

Encryption:

Cipher text: C

Decrypt message with private key

Cipher text: C

Decryption:

Plain text: M

In a public-key system using RSA, you intercept the cipher text C = 10 sent lo a user whose public key is e = 5,n = 35. What is the plain text M

answer:

We know that 35 is relatively small, and we can decompose the prime numbers into 5 and 7

Then we can get T=(5-1)X(7-1)=24,24 and 5 are relatively prime

We can use the formula DE mod T=1 to get the value of D which is the private key

We can know the private key from the picture (n,D)=(35,5)

Decrypt

M=5,so the plain text is 5

cpp 复制代码
#include<iostream>
int candp(int b,int p, int k) //b--明文或密文   p--指数(e/d)    k--模数
{
	if (p == 1)
	{
		return b % k;
	}
	if (p == 2)
	{
		return b * b % k;
	}
	if (p % 2 == 0)
	{
		int  sum = candp(b, p / 2, k);
		return sum * sum % k;
	}
	if (p % 2 == 1)
	{
		int sun = candp(b, p / 2, k);
		return sun * sun * b % k;
	}
}
int main()
{
	int d = 1;
	//求e的乘法逆
	int e = 5;
	int t = 24;
	while (((e * d) % t) != 1)
	{
		d++;
	}
	std::cout <<d<<std::endl;


	
		int  n=35, x=0, y=10;

		x = candp(y, d, n);
		std::cout << "明文为:" << x << std::endl;
		return 0;

}
相关推荐
xiaobai1781 小时前
测试工程师入门AI技术 - 前序:跨越焦虑,从优势出发开启学习之旅
人工智能·学习
北岛寒沫1 小时前
北京大学国家发展研究院 经济学原理课程笔记(第二十一课 金融学基础)
经验分享·笔记·学习
扑火的小飞蛾2 小时前
网络安全小白学习路线图 (基于提供文档库)
学习·安全·web安全
优雅的潮叭2 小时前
c++ 学习笔记之 malloc
c++·笔记·学习
薛不痒3 小时前
深度学习之优化模型(数据预处理,数据增强,调整学习率)
深度学习·学习
昵称已被吞噬~‘(*@﹏@*)’~4 小时前
【RL+空战】学习记录03:基于JSBSim构造简易空空导弹模型,并结合python接口调用测试
开发语言·人工智能·python·学习·深度强化学习·jsbsim·空战
我想我不够好。4 小时前
学到的知识点 1.8
学习
旖旎夜光5 小时前
Linux(9)
linux·学习
浩瀚地学5 小时前
【Java】常用API(二)
java·开发语言·经验分享·笔记·学习
chao_6666666 小时前
解决 PowerShell 中文乱码问题
网络·学习·powershell