CTFRSA加解密

最近做题遇到好几次RSA解密,最近密码学课也学到了 RSA密码算法,写一篇文章促进对RSA的理解。

一:RSA的基本原理的理解:

1.学习RSA加密得知道欧拉函数,想理解欧拉函数又得弄明白同余类与剩余系的知识,这些是基础。

2.RSA的密钥生成原理:

第一步:选择两个较大素数P,Q.

第二步:计算n=pq,z=(p-1)(q-1)。

第三步:随机选取e(其中e<n),e与z没有公因数(e,z互为质数)

第四步:选取d使得ed-1能够被z完全整除。ed mod z=1

第五部:公钥是(n,e) 私钥是(n,d)

 

二 下面以SUCTF 2019 signin记录一下RSA的应用与解密方法

 这里函数分析得到 

N=103461035900816914121390101299049044413950405173712170434161686539878160984549

c = 0xad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35

e = 65537

第一步我们要求取的是pq两个素数的值 从其他大佬那里偷来神器RSAyafu 他可以讲给定的数分成两个相乘的素数

 

 直呼nb

第二种使用方法:

如果因数过长,将 因数 用文本文件存放在 yafu 目录下,例如:data.txt 。文件最后一行一定要换行,否则 eof; done processing batchfile。

.\yafu-x64.exe "factor(@)" -batchfile data.txt

p = 366669102002966856876605669837014229419

q = 282164587459512124844245113950593348271

下面就是使用python解密了

(先得安装gmpy2库)

学习一下gmpy2库的使用

gmpy2.invert(a,c) 对a,求b,使得a*b=1(mod c)

gmpy2.powmod(a,n,p)  对于给定的整数p,n,a,计算aⁿ mod p

补充一下binascii.unhexlify函数

unhexlify(hexstr)将十六进制转换为二进制形式。

hex()函数记得加[2:]去掉开头的0x。

求d脚本

import gmpy2
from Crypto.Util import number
e=65537
n=87924348264132406875276140514499937145050893665602592992418171647042491658461
p=275127860351348928173285174381581152299
q=319576316814478949870590164193048041239
d=gmpy2.invert(e,(p-1)*(q-1))
print(d)

密文拿到手之后,需要密文的数字形式,用winhex打开查看十六进制形式

最后得到的密文的十六进制形式数字个数需要是偶数被,不是则尝试加0或者删除

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值