RSA算法总结

1.RSA加密过程

1.1随机生成两个质数p,q计算出模数n,n=p * q(p和q越大,越安全,因为n位数越大,越难破解)
将n转换为2进制,n的位数即为加密算法的位数,目前常用的是1024位,重要场合使用2048位
1.2 计算φ(n)=(p-1) * (q-1), 表示在<=n 的正整数之中,与 n 构成互质关系的数的个数
1.3随机选取密钥e,使得e与φ(n)互质(1 < e < φ(n) )
1.4求得一个整数d,使得 d满足(e * d)%m = 1
至此,可以得到公钥(n,e)和私钥(n,d)密文传输过程中只公布公钥,其余数字均不公布
1.5加密
将明文a使用公钥加密为b,b=a^e%n(其中a的位数要小于n的位数)

2.RSA解密过程

如果知道私钥(n,d)则将密文b使用私钥解密为a
a=b^d%n
整个过程产生了p,q,n,φ(n),e,d;6个变量,在ctf中,应根据不同情况作出相应解法

3.ctf中RSA题目总结

攻防世界-easy_RSA

题目描述如下图所示
在这里插入图片描述题目中给定了p,q,e;根据N=p*q可以计算出模数,将N转换为2进制,此时N的位数就是工具中的Key大小,注意加密指数e是16进制,需要将10进制下为17的e转换为16进制下的11,计算私钥d即可得到答案
在这里插入图片描述也可以使用工具CTF-RSA-tool,在终端中输入python solve.py -v --private -N 2135733555619387051 -p 473398607161 -q 4511491 -e 17,计算出d

在这里插入图片描述
CTF-RSA-tool

攻防世界 Normal_RSA

题目中包含两个文件
在这里插入图片描述flag.enc是密文文件,pubkey.pem是公钥文件,一般这种题目我们需要提取出公钥(n,e)通过各种攻击手段恢复私钥,然后去解密密文flag.enc得到flag
在这里插入图片描述得到e=65537 ,模数N为
C2636AE5C3D8E43FFB97AB09028F1AAC6C0BF6CD3D70EBCA281BFFE97FBE30DD,将N转换为10进制87924348264132406875276140514499937145050893665602592992418171647042491658461
使用工具yafu分解模数N,得到p=275127860351348928173285174381581152299,q=319576316814478949870590164193048041239

输入如下命令,生成私钥private.pem

python rsatool.py -o private.pem -e 65537 -p 275127860351348928173285174381581152299 -q 319576316814478949870590164193048041239

在openssl下使用命令
rsautl -decrypt -in flag.enc -inkey private.pem
解密flag.enc
在这里插入图片描述
所用到的工具的介绍以及安装方法
参考文章1
参考文章2
参考文章3

以后在做题过程中遇到RSA相关题目会持续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值