栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

MOECTF2021 LazyRSA writeup

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MOECTF2021 LazyRSA writeup

题目名:LazyRSA

分类:Crypto

来源:moectf

链接:https://www.moectf.online/challenges

思路:
拿到题目的python源代码后,发现是一个对flag进行RSA加密的脚本,且源代码在注释中给出相关的密文c,加密用到的中间量p,q,e。
根据RSA的相关知识,构造解密脚本,代入p,q,e对c进行解密即可拿到flag。

RSA相关加密解密方法:
https://baike.baidu.com/item/RSA%E7%AE%97%E6%B3%95/263310?fromtitle=RSA&fromid=210678&fr=aladdin
以下为题目给出的python源代码:

flag = xxx
m = bytes_to_long(flag)

c = pow(m,e,n)
print("p = " , p)
print("q = " , q)
print("c = " , c)
'''
p =  7049120988661090136959367990211624032671088374397430253722914704672269343351268486642692858477617370573493581346846411168539408811542592351582581576539221
q =  11595461299251293002401295606096202123601375776115430944343338141843770078346355504245510150744085418550473572002573306023521368183889972175846278163010889
c =  48425576447741107904942007362859939933300480519833273210397511573241220126734053813936424490872852942885069257318462762079636783871415500644717758273774268724488497979368196170897933989184449432995120246590652553995031347596620505647525475638040859263109628716173897321613612254357251120398449111747305089380
'''

以下为自己写的解密脚本:

from Crypto.Util.number import*

p = 7049120988661090136959367990211624032671088374397430253722914704672269343351268486642692858477617370573493581346846411168539408811542592351582581576539221
q = 11595461299251293002401295606096202123601375776115430944343338141843770078346355504245510150744085418550473572002573306023521368183889972175846278163010889
c =  48425576447741107904942007362859939933300480519833273210397511573241220126734053813936424490872852942885069257318462762079636783871415500644717758273774268724488497979368196170897933989184449432995120246590652553995031347596620505647525475638040859263109628716173897321613612254357251120398449111747305089380

n = p*q
e = 0x10001

k = 1
while True:
    if (k*(p-1)*(q-1)+1)%e == 0:
        d = (k*(p-1)*(q-1)+1)//e
        break
    else:
        k += 1
    
m = pow(c, d, n)
flag = long_to_bytes(m)
print(flag)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/294393.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号