概念
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