CTF入门Crypto之RSA(直接分解模数N)
|
![]() |
![]() |
![]() |
| 【性价之王】 | 【线路之王】 | 【价格之王】 | 【配置之王】 |
| 【免费之王】 | 【香港首推】 | 【梯子之王】 | 【独服之王】 |
一、RSA基本原理
(1)独立地选择两个大的素数p和q(100~200位十进制数)。
(2)计算出模数 N = p * q,计算欧拉函数值 φ = (p-1) * (q-1)。
(3)然后选择一个e(1<e<φ),(φ,e)=1(即e和φ互质)(互质:公约数只有1的两个整数)。
(4)取e的模反数d,计算方法为:e * d ≡ 1 (mod φ) (模反元素:如果两个正整数e和n互质,那么一定可以找到整数d,使得 e * d – 1 被n整除,或者说e * d被n除的余数是1。这时,d就叫做e的“模反元素”。欧拉定理可以用来证明模反元素必然存在。两个整数a,b,它们除以整数M所得的余数相等:a ≡ b(mod m),比如说5除3余数为2,11除3余数也为2,于是可写成11 ≡ 5(mod 3)。)。
(5)得到公钥(n,e)和私钥(n,d)。
(6)对明文m进行加密:c = pow(m, e, N),可以得到密文c。
(7)对密文c进行解密:m = pow(c, d, N),可以得到明文m。
二、CTF中的RSA
1、直接分解模数N
(1)原理
由RSA的基本原理可知,通过分解N,得到p和q是最直接的攻击方法,但也是最难的攻击方法,RSA在设计时就已通过数学方法的证明,只要p和q选取的当,N不可能被分解(这里不能被分解指的是在有限的时间内,一般来说破解所花的时间要在该信息存在价值的时间范围内),当然目前量子计算机是破解RSA的一种有力工具了。 在CTF中,如果是考察分解N来解题,则意味着题目中的N是简单的,通过工具就可以分解的出来。常用的工具是windows平台的RSATool和在线分解(http://factordb.com),在线分解的原理是该网站存储了一些N及N的分解值p和q
(2)例题,直接给出n和e
import gmpy2n = 920139713# p 和 q通过在线网站http://factordb.com/index.php分解p = gmpy2.mpz(18443)q = gmpy2.mpz(49891)e = gmpy2.mpz(19)phi_n = (p-1)*(q-1)d = gmpy2.invert(e, phi_n)c = """7047967927522111522747041641841402236827083548329523526307290545978847648329523545978847666355179247520680445978847642831337447520680445978847642539213770479679245826567734152224652483295235534149509425392137428313374425392137341524652458265677263072905483295235828509797341524652425392137475206804428313374483295235475206804459788476306220148"""result = ""c_list = c.split()#print(c_list)for i in c_list: result += chr(pow(int(i),d,n))print(result)import gmpy2n = 920139713# p 和 q通过在线网站http://factordb.com/index.php分解p = gmpy2.mpz(18443)q = gmpy2.mpz(49891)e = gmpy2.mpz(19)phi_n = (p-1)*(q-1)d = gmpy2.invert(e, phi_n)c = """7047967927522111522747041641841402236827083548329523526307290545978847648329523545978847666355179247520680445978847642831337447520680445978847642539213770479679245826567734152224652483295235534149509425392137428313374425392137341524652458265677263072905483295235828509797341524652425392137475206804428313374483295235475206804459788476306220148"""result = ""c_list = c.split()#print(c_list)for i in c_list: result += chr(pow(int(i),d,n))print(result)import gmpy2n = 920139713# p 和 q通过在线网站http://factordb.com/index.php分解p = gmpy2.mpz(18443)q = gmpy2.mpz(49891)e = gmpy2.mpz(19)phi_n = (p-1)*(q-1)d = gmpy2.invert(e, phi_n)c = """7047967927522111522747041641841402236827083548329523526307290545978847648329523545978847666355179247520680445978847642831337447520680445978847642539213770479679245826567734152224652483295235534149509425392137428313374425392137341524652458265677263072905483295235828509797341524652425392137475206804428313374483295235475206804459788476306220148"""result = ""c_list = c.split()#print(c_list)for i in c_list: result += chr(pow(int(i),d,n))print(result)(3)例题,给出key和flan.enc
import gmpy2from Crypto.PublicKey import RSAimport rsapublic_key = "./file/pub.key"cipher_file = "./file/flag.enc"#读入公钥with open(public_key, "r") as f: key = RSA.importKey(f) n = key.n e = key.e print(key.n) #86934482296048119190666062003494800588905656017203025617216654058378322103517 print(key.e) #65537#大数分解得到p = 285960468890451637935629440372639283459q = 304008741604601924494328155975272418463phin = (q-1)*(p-1)d = gmpy2.invert(e, phin)key = rsa.PrivateKey(n, e, int(d), p, q)with open("./file/flag.enc", "rb+") as f: f = f.read() print(rsa.decrypt(f, key))import gmpy2from Crypto.PublicKey import RSAimport rsapublic_key = "./file/pub.key"cipher_file = "./file/flag.enc"#读入公钥with open(public_key, "r") as f: key = RSA.importKey(f) n = key.n e = key.e print(key.n) #86934482296048119190666062003494800588905656017203025617216654058378322103517 print(key.e) #65537#大数分解得到p = 285960468890451637935629440372639283459q = 304008741604601924494328155975272418463phin = (q-1)*(p-1)d = gmpy2.invert(e, phin)key = rsa.PrivateKey(n, e, int(d), p, q)with open("./file/flag.enc", "rb+") as f: f = f.read() print(rsa.decrypt(f, key))import gmpy2from Crypto.PublicKey import RSAimport rsapublic_key = "./file/pub.key"cipher_file = "./file/flag.enc"#读入公钥with open(public_key, "r") as f: key = RSA.importKey(f) n = key.n e = key.e print(key.n) #86934482296048119190666062003494800588905656017203025617216654058378322103517 print(key.e) #65537#大数分解得到p = 285960468890451637935629440372639283459q = 304008741604601924494328155975272418463phin = (q-1)*(p-1)d = gmpy2.invert(e, phin)key = rsa.PrivateKey(n, e, int(d), p, q)with open("./file/flag.enc", "rb+") as f: f = f.read() print(rsa.decrypt(f, key))猜你可能想看的VPS
- TmhHost:香港大带宽云服务器/季付8折/200带宽,120元/3月 香港VPS[主机]
- aoyoyun:傲游主机/傲游vps/傲游云,香港vps,60M大带宽, WINDOWS
- 自适应bootstrap左侧导航可关闭 全球[VPS测评]
- 什么是Bootstrap? 全球[VPS测评]
- 阿里云服务器一年价格多少钱?阿里云服务器报价 全球[VPS测评]
- 拼多多入局跨境电商平台,首站美国;奈雪的茶在上海建第二总部;pidan“ 美国VPS[主机]
- 快速云:云服务器vps的区别是什么云服务器和vps哪个比较好2022-0 全球[VPS测评]
- Vultr新用户100美金 最新活动来啦!新用户充值活动来了,充100美 全球[VPS测评]
- 野草云怎么样?香港、美国圣何塞高防VPS 1核1G3M 月付19元 美国VPS[主机]
- uuuvps:香港大带宽vps低至239元/年;香港服务器720元/e3 香港VPS[主机]
- 华纳云年终钜惠活动:云服务器半年低至280元,香港高防服务器999元 香港VPS[主机]
- 弘速科技:香港安畅CN2 GIA/弹性云服务器10元/月,2核1GB/2 香港VPS[主机]
- 桔子数据怎么样?美国、香港CN2云服务器2核2G10M带宽仅480元/年 美国VPS[主机]
- 青云互联:年终特惠香港弹性云服务器15元/月起,可自定义配置,可选win WINDOWS
- 腾讯云免备案海外服务器:高速网络免备案,助力企业出海! 全球[VPS测评]
- 狸猫云:香港高速CN2VPS,200元/年-香港高速GIA云服务器促销活 香港VPS[主机]
- SugarHosts糖果主机:虚拟主机5折(有独立IP);香港/美国cn 独立服务器[U]
- 酷锐云:香港安畅机房4H/4G/60G/20Mbps,45元/月;香港C 香港VPS[主机]
- 特网云:香港云服务器新上线,香港新界机房;1核/1G/5M宽带/50G硬 香港VPS[主机]
- 阳帝云:3月优惠活动,香港GIA/香港TG/洛杉矶200G硬防vps,首 香港VPS[主机]
- 啤啤云:美国圣何塞vps低至30元/月;香港cn2vps仅43元/月起 美国VPS[主机]
- 速泽云:香港学生云主机,7.5元/月起;镇江NET2.1元/月起,美国v 美国VPS[主机]
- 孤狼云:香港安畅、沙田CN2 VPS,1核/1G/40G硬盘,10元/月 香港VPS[主机]
- 景林网络:香港CN2 GIA云服务器,1核/1G/20G/10M,促销月 香港VPS[主机]
- 向日葵-漏洞科普:海外云服务器三种漏洞修复方法快收藏起来! 全球[VPS测评]
- 中国跨境电商,如何掘金欧洲市场? 全球[VPS测评]
- 奇维云优惠活动:香港CN21核1G1M带宽云服务器免费领取 香港VPS[主机]
- 空空云怎么样?香港CN2-GIA VPS,带宽2M,月付15元 香港VPS[主机]
- 极光KVM:美国香港vps CN2 GIA专线高速稳定,BGP服务器低至 美国VPS[主机]
- 二三互联,香港cn2云服务器5折+85折双重优惠,稳定不限流量,1核1G 香港VPS[主机]
转载请注明原文地址: http://140.238.13.167:12355/read-44416.html











