尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

20250820_浙江省职业职工技能竞赛_crypto

20250820_浙江省职业职工技能竞赛_crypto
📅 发布时间:2026/6/19 9:31:59
RSA, 低位, 高位, 限定数字

Tags:RSA,低位,高位,限定数字

0x00. 题目

task.py

from Crypto.Util.number import isPrime, bytes_to_long
import random
from secrt import flagdic = '748'
def prime():while True:k=''for i in range(748):k+=random.choice(dic)pp=int(k)if(isPrime(pp)):return ppp = prime() 
q = prime() n = p * qe =65537
m = bytes_to_long(flag)
c = pow(m, e, n)
print(f"{n=}")
print(f"{c=}")# n=57965216431933226088796671560818941715121392599285777776672758640570086526675287152015619764069299308825089116861195994564163709434808504486258356532895902967858084940632535021778355936353791400167969303079202169837105937298917467373594066850173373339609212401443396782621684812245029494163289347928988992276942525751480546303137377033468992806790360929517672740297764885016029803533296318669224922494853004018456134012009264204906747690767456046073446163802842351174657264712396221558066131431659690721193312072386557437906372905782278159328864517401768732254192656830780576437025230799047080278730474627869391253905615746705567257158666304340167742054379271825568235436291925014347855870208683389009528532708537040018870866271190433215727668736150850586218141730816056278416131761818558733326510888446922478606049322044132625524399430131625135974580967196690690961382730264912034804081499295489782685334607914285245817722260504036511127791220028052476519132968151033319093483512978479238169260126593834659988534831841859650443331504563826067501185430579142261819063084927878436971300990694337363860225741229287312641009094063983434837371798862359718653594539496546026106933351796739520288339134143996030111275436323906085663984569165082375257330158500296289123376635483316448887558687398990511556116134381677091751826925239804718769518584943573058641588317541410945664488828782867029062180080232497850975279918077935794707136675902099269605201882426853800576732414458387766890219590772341967969
# c=30141476980590174348772446648527482877070063037478657776591896402672987423631623758994066377912792161562669161519716429780152775007589079256512244643450724299278968451284477417709016852473274663625630494103609165334444822865544443696116481792059567500101436829062338660828311682812476373464468060732692448226801336367572307770060050898091922193151200986979795214042306515901689852377315097677391039215862531178400811793704594792717141171507165373583716285712327194598086265674202719038858698536002661368396165178522214382746608403106117102736662822707513950717034287510805772337630254023238478573894620311021792523398076005567938325787916609984858587921207218932787306331094101829756256087792482841096367250635565901291397029669766797847936134686398508813861343026911817383920613198265910303506364467801274148700985306361111426810778097627247891369190662779236709889493798366283345423861513797980882418046529583677042521149450854473747324838601775084787042622048026655821994976076086402841196819585167376907647875708367958024913620824785339916409370296990089312043496137645759264951523489056400201068285324699101161915270843301476198903517791295302012765794522376193563730567571578589811077405043519348013203769285214365510100951141028830960150948618247871300573240919993617398859268444359487810047216444991511135894557793406370145743583050152591591868316780130571308792296210653042685689680492971272572081926200278523241327399476475717901347280567397478294927001472777840445762324930806043484621

0x01. WP

1. 代码解析

用7483个数字组成了2个748位的素数,然后对flag进行RSA加密得到c

2. 解密分析

通过从低位到高位的逐位计算,推算pq可能的组合对,因为n的个位是9,所以pq的个位都是7,以此类推

3. 编写exp.py脚本

exp.py

from Crypto.Util.number import isPrime, long_to_bytes
import sysdef solve_low_to_high(n, digits=748):"""从最低位开始逐位确定p和q"""print("Starting low-to-high attack...")# 初始化:个位states = []  # 每个元素是 (p_low, q_low)for a in [4, 7, 8]:for b in [4, 7, 8]:if (a * b) % 10 == n % 10:states.append((a, b))print(f"After 1 digit: {len(states)} states")# 从第1位到第digits-1位(共748位)for k in range(1, digits):mod_base = 10 ** (k + 1)next_states = []for (p_low, q_low) in states:for a in [4, 7, 8]:for b in [4, 7, 8]:p_new = p_low + a * (10 ** k)q_new = q_low + b * (10 ** k)# 检查模 10^(k+1) 是否匹配if (p_new * q_new) % mod_base == n % mod_base:next_states.append((p_new, q_new))states = next_statesprint(f"After {k+1} digits: {len(states)} states")# 如果没有状态了,提前退出if len(states) == 0:print("No valid states found!")return None, None# 如果状态太多,可能是算法有问题,提前退出if len(states) > 1000:print("Too many states, something might be wrong!")return None, None# 检查完全确定的p和qprint("Checking final states...")for (p, q) in states:if p * q == n:# 验证是否为素数if isPrime(p) and isPrime(q):print("Found valid p and q!")return p, qprint("No valid factorization found")return None, Nonedef decrypt_rsa(n, p, q, c, e=65537):"""RSA解密"""phi = (p - 1) * (q - 1)d = pow(e, -1, phi)m = pow(c, d, n)return long_to_bytes(m)if __name__ == "__main__":# 给定的值n = 57965216431933226088796671560818941715121392599285777776672758640570086526675287152015619764069299308825089116861195994564163709434808504486258356532895902967858084940632535021778355936353791400167969303079202169837105937298917467373594066850173373339609212401443396782621684812245029494163289347928988992276942525751480546303137377033468992806790360929517672740297764885016029803533296318669224922494853004018456134012009264204906747690767456046073446163802842351174657264712396221558066131431659690721193312072386557437906372905782278159328864517401768732254192656830780576437025230799047080278730474627869391253905615746705567257158666304340167742054379271825568235436291925014347855870208683389009528532708537040018870866271190433215727668736150850586218141730816056278416131761818558733326510888446922478606049322044132625524399430131625135974580967196690690961382730264912034804081499295489782685334607914285245817722260504036511127791220028052476519132968151033319093483512978479238169260126593834659988534831841859650443331504563826067501185430579142261819063084927878436971300990694337363860225741229287312641009094063983434837371798862359718653594539496546026106933351796739520288339134143996030111275436323906085663984569165082375257330158500296289123376635483316448887558687398990511556116134381677091751826925239804718769518584943573058641588317541410945664488828782867029062180080232497850975279918077935794707136675902099269605201882426853800576732414458387766890219590772341967969c = 30141476980590174348772446648527482877070063037478657776591896402672987423631623758994066377912792161562669161519716429780152775007589079256512244643450724299278968451284477417709016852473274663625630494103609165334444822865544443696116481792059567500101436829062338660828311682812476373464468060732692448226801336367572307770060050898091922193151200986979795214042306515901689852377315097677391039215862531178400811793704594792717141171507165373583716285712327194598086265674202719038858698536002661368396165178522214382746608403106117102736662822707513950717034287510805772337630254023238478573894620311021792523398076005567938325787916609984858587921207218932787306331094101829756256087792482841096367250635565901291397029669766797847936134686398508813861343026911817383920613198265910303506364467801274148700985306361111426810778097627247891369190662779236709889493798366283345423861513797980882418046529583677042521149450854473747324838601775084787042622048026655821994976076086402841196819585167376907647875708367958024913620824785339916409370296990089312043496137645759264951523489056400201068285324699101161915270843301476198903517791295302012765794522376193563730567571578589811077405043519348013203769285214365510100951141028830960150948618247871300573240919993617398859268444359487810047216444991511135894557793406370145743583050152591591868316780130571308792296210653042685689680492971272572081926200278523241327399476475717901347280567397478294927001472777840445762324930806043484621print("Attempting to factor n...")p, q = solve_low_to_high(n)if p and q:print(f"Found p: {p}")print(f"Found q: {q}")# 验证if p * q == n and isPrime(p) and isPrime(q):print("Factorization verified!")# 解密flag = decrypt_rsa(n, p, q, c)print(f"Decrypted flag: {flag}")else:print("Factorization failed verification!")else:print("Failed to factor n")# Decrypted flag: b'flag{try_t0_f4ctor_th1s}'

相关新闻

  • 第一章pytorch安装
  • 深入解析:i.MX6ULL移植内核6.6(一)修改网络驱动和LCD驱动
  • 【MySQL】XML中基于已有查询代码,进一步做汇总统计

最新新闻

  • 2026萍乡2026正规漏水检测维修公司精选口碑榜TOP5权威推荐-精准定位检测漏水点-专业防水补漏堵漏维修、卫生间/厨房/屋顶/天沟/地下室/阳台防水漏水检测维修 - 安佳防水
  • 深入解析LPC2478:ARM7TDMI-S内核、双AHB总线与关键外设实战
  • 5倍效率提升:Dify官方插件集的AI集成革命
  • 2026潮州漏水检测维修精选优质服务商TOP5推荐!卫生间漏水/厨房漏水/屋顶天花板漏水/阳台漏水/地下室漏水防水补漏检测维修-正规防水补漏公司优选口碑榜测评推荐 - 即刻修防水
  • 2026年天津GEO优化服务商推荐指南 - GEO优化
  • 2026年近期陕西消防:专业消防技术服务商选择与推荐 - 品牌鉴赏官2026

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号