口算加密php怎么使用,从数盲到口算 ——带你玩转RSA加密算法(一)

19f06713f7079944ae342adf2a9222cf.png

RSA是一种非对称加密算法,它由 公钥(n/e),私钥(n/d),明文M和密文C组成。我们做CTF题目时,一般题目中会给出公钥和密文让我们推出对应的私钥或者明文。RSA的相关公式都写在上面脑图中,在正式讲解RSA加密算法前我们先来普及一波数学的基本知识。

一、相关数学基础

1.1素数和互质数

素数也称质数,它的定义为除本身和 1 的乘积外,不能表示其他数的乘积。比如2,3,5,7,11,13,17……等都是素数。

互素数也称互质数,定义是公约数只有1的两个自然数,如:

1和任何自然数 1 & 2

任意 2个质数 2 & 3

相邻2个自然数 4 & 5

3 & 10 、7 & 10 、5 & 26等等

1.2模指数运算

模运算就是取余数,如5 mod 3 =2。而模指数就是,先做指数运算在做mod运算。

如:53 mod 7 = 125 mod 7 =6

我们可以使用python的pow()来求解模指数运算。

12b1c85cd3282a490cdcfceefb941641.png

1.3同余运算

两个整数a,b,它们除以整数M所得的余数相等:a ≡ b(mod m),比如说5除3余数为2,11除3余数也为2,于是可写成11 ≡ 5(mod 3)。

二、RSA加密算法

2.1 加解密算法

前面已经说过,RSA是一种非对称加密算法,这个算法的特点就是明文使用公钥进行加密得到密文,而密文解密使用私钥来解。

09b927c402b7bd739ba62a6085719554.png

所需的密钥对为n,d,e。密钥对是如何生成的?

2.2 生成密钥对

密钥对的生成步骤如下:n → L→e→d (L作为生成过程中的中间数)

8cf2a923ac2f9bd5bf049d5fecd9bcd2.png

三、CTF题目实战

3.1 First Blood 已知p、q、e求d

题目链接 : http://www.shiyanbar.com/ctf/1828

题目:

在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17,求解出d

此题直接告诉我们p、q、e,让我们求解d

而d的计算公式为d*e ≡ 1 (mod L*i)  ,i=1,2,3...,

由于1和任何数做mod都为1,所有该公式又可转换为:

d*e mod (L*i )=1 , i=1,2,3...。

d*e除(L*i)的余数为1,即d*e = (L*I) + 1 。

直接使用脚本进行实现。

053985c9efdd4c92f4771a76f473ae05.png

求d的脚本,也可以又rsatool.py这个脚本来实现,需要安装gmpy这个模块,链接如下:

链接:http://pan.baidu.com/s/1bCDyoQ 密码:09gj

3.2 Double Kill  已知p、q、e和密文 求明文

题目链接 : http://www.shiyanbar.com/ctf/1979

题目:

Use RSA to find the secret message

直接跑上题脚本获取d:

a968a31f28dd034528b7bbcc434bade5.png

ee062bd27e6d7c1753cc3a7e5c0d1547.png

57053fbefb60657740e03b5a075a85d9.png

5577446633554466577768879988

3.3 Triple Kill  已知n、e和密文 求明文

题目链接 : http://www.shiyanbar.com/ctf/1918

8379678ec060cd717d5d4f545876e94e.png

n=920139713,e=19

因式分解 n 用yafu 或者在线因式分解

使用yafu:链接:http://pan.baidu.com/s/1croXpO 密码:w43p

03148c4518152037b312d9a2ed980b49.png

在线地址:

http://www.atool.org/quality_factor.php

b430046299adb9f956ec53144178bc48.png

p=18443,q=49891

求d:

5fb41bf2188e88f15b42a16f90002d7b.png

d=96849619

解密:

e790546d38d425828aac29029b24b56c.png

4b395e99e77a7c9223442eb4351d8af4.png

flag{13212je2ue28fy71w8u87y31r78eu1e2}

3.4 Quadra Kill  已知公钥和密文 求明文

题目链接 : http://www.shiyanbar.com/ctf/1772

题目:

09d5445c61a8e5d341bb0a2a14c499ac.png

此题只给了公钥,并没有做分解,我们可以对题目所给的公钥进行分解。

python实现:

602438367a5edc358b036e4de69007b3.png

f4a99d8f2c3e2a902dda49999548113f.png

或则使用openssl:

af28f23add015325773b7867773a2cbb.png

使用yafu分解n 的值

a21d510174007c4f9ac1c684768baa7f.png

rsa-d.py计算d 的值

0218c548fceba0df63807d8fbd4d0b5f.png

466c73cc7621eca5bfe43f143e67a421.png

明文 = 密文d mod n

a8b608fdb437fafc5b0603747bd5800c.png

3.5 Penta Kill  已知公钥和密文 求明文

题目链接 : http://www.shiyanbar.com/ctf/730

题目:

d3739c77821b36c4776f88e07474ca73.png

896da6792fd559061522a843aa6992f0.png

分解公钥得n、e的值,然后求解d,这边提供另外一种求解d的方案,就是利用github上的一个开源项目

github: https://github.com/pablocelayes/rsa-wiener-attack

fe2ed76c8d3d4f7ff2b09552962ac3a2.png

3cab86cc9b535e78f4fa04b1184c273e.png

python脚本下载:链接:http://pan.baidu.com/s/1qXVhKpI 密码:fuef

三、总结

限于篇幅,本篇先到这里告一个断落,下期会带来一些有一定难度RSA题目的解法,敬请期待,让斗哥带你走上RSA超神之路吧!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值