概念

1,因数

例如2 * 3 = 6

2,3是6的因数


2,质数

5这个数字的因数只有1 和 5

这就是一个质数


3,余数(取模 mod)

7 % 3 = 1

加解密全过程:

公钥 —加密–> 加密数据—–>用户—>私钥–解密–>密文


因为公钥是已知的,一般是两个,例如:

(7,33)

私钥也是两个数字,只有一个是已知的:

(?, 33)


源数据:字母或者数字串

先把源数据转化为10进制

例如:

有源数据

1
3 1 15

把每个字母的对应10进制求公钥的第一个数字的幂(几次方)

例如:

1
3^ 7  ,  1^7   ,  15^7

然后分别利用第二个数字进行模运算:

1
(3^ 7)mod 33  	 (1^7)mod 33  	(15^7)mod 33

得到密文:

1
9,1,27

然后解密者利用私钥 (?,33)

此处 ?在这里是7

先求幂,再模运算:

1
9^3 1^3 27^3

再模运算:

1
9^3)%33		 1^3)%33	 27^3)%33

得到了:

1
3,1,15

公钥:(e,n),私钥:(d,n)

公式一:
$$
明文^e mod(n) =密文
$$

$$
密文^d mod(n) =明文
$$

公钥和私钥的制作过程

1 挑选2个质数p ,q

2 相乘两个质数,构成公钥的第二个数字n

3 欧拉函数
$$
T=(p-1)(q-1)
$$
4 人为选择公钥e ,e必须是质数,且大于1,小于T,不是T的因子

5 计算私钥
$$
(d*e)mod(t) = 1
$$
d是未知的,需要计算,而n是已知的,t是需要猜测p 和q的

因此要知道d,需要满足5式

代码中的各个式子是什么意思

c=pow(m,e,n):

$$
c=m^emod(n)
$$
由此可以看到m是明文,这个的结果c是密文,解密就需要用到上述的公式一的2式

flag=pow(c,d,n):
$$
flag=c^dmod(n)
$$
欧几里得算法gcd