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

news/2025/9/26 16:18:00/文章来源:https://www.cnblogs.com/JasonJHu/p/19113715

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}'

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/918522.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

非结构网格中计算场梯度的手段比较

非结构网格中计算场梯度的手段比较pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&…

第一章pytorch安装

一.创建anaconda虚拟环境(以后如果没有特殊要求可以用当前已经创建好的环境) 在Anaconda Prompt里创建环境现在是创建一个名为pytorchnow的虚拟环境,用python3.9为了匹配要安装的pytorch conda create -n pytorchno…

钡铼技术:2025工业智能体元年,盘点已推出的工业AI大模型总有一款适合您

2025 年被称作“智能体元年”。在上海工博会上,西门子展示了他们的 Industrial Copilot —— 一个能够辅助工程师编写 PLC 程序、理解工艺文档、甚至优化设备调试的大模型应用。 这不仅仅是一次产品展示,更释放了一个…

深入解析:i.MX6ULL移植内核6.6(一)修改网络驱动和LCD驱动

深入解析:i.MX6ULL移植内核6.6(一)修改网络驱动和LCD驱动pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

微算法科技(NASDAQ MLGO)使用基于深度学习的物理信息神经网络(PINN),增强区块链IoT网络交易中的入侵检测

在万物互联时代,物联网设备数量呈指数级增长,区块链技术凭借其去中心化、不可篡改特性成为保障IoT交易安全的关键基础设施。然而传统入侵检测系统面临动态网络拓扑、异构设备协议及加密流量分析等多重挑战,难以有效…

前端模块化——彻底搞懂AMD、CMD、ESM和CommonJS

目录CommonJS AMD和require.js CMD和sea.js ES6 ModuleES6 模块与 CommonJS 模块的差异总结 我们知道,在NodeJS之前,由于没有过于复杂的开发场景,前端是不存在模块化的,后端才有模块化。NodeJS诞生之后,它使用Co…

【MySQL】XML中基于已有查询代码,进一步做汇总统计

任务有点急,什么规范、性能,暂时别考虑了。 xml中已有代码 <select id="xxx" resultType="xxxx"> SELECT …… </select>然后这个SQL是超级超级复杂的,我们不能对他进行任何改动,…

别再一张证件照用到底了,我建了个“个人形象库”

这可能就是未来职场人的标配吧——不仅要管理好自己的能力,还要高效、低成本地管理好自己的个人品牌形象。前阵子,更新简历,需要一张得体的职业形象照。 不爱去去照相馆,太折腾。想着试试在网上学了一些,自己写了…

渌口区市政建设局网站东莞浩智网站建设哪家好

因为经常使用LRU&#xff08;Least Recently Used&#xff0c;最近最少使用&#xff09;或其他缓存替换策略来管理存储在KV Cache中的数据&#xff0c;保证高效的数据访问。在Transformer等深度学习模型中&#xff0c;KV Cache被广泛应用于存储Self-Attention机制中的中间计算结…

武威市市建设局网站建筑业管理网站ie不兼容

&#x1f3b6;Leetcode 151. 反转字符串中的单词 难度&#xff1a;中等 ✨题目描述&#xff1a; 给你一个字符串 s &#xff0c;请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 …

Vue3.5 + Node.js + Express 实现完整登录注册鉴权流程

​ 在前后端项目里,登录注册和权限鉴权基本算是 “老大难” 问题。做得不严谨,系统就会有漏洞;做得太复杂,又会让开发效率大打折扣。 这篇文章,我结合 Vue3.5 和 Node.js + Express,带大家梳理一下完整的登录注册…

【SPIE出版】第七届地球科学与遥感测绘国际学术会议(GRSM 2025)

第七届地球科学与遥感测绘国际学术会议将于2025年10月17-19日在中国-乌鲁木齐召开。【GRSM 往届均均已全部成功EI检索!】 【下半年遥感测绘、地球科学类重点会议!】 第七届地球科学与遥感测绘国际学术会议(GRSM 202…

ARL(灯塔)安装步骤--超简单!!

ARL(灯塔)安装步骤 在 CentOS 云服务器上安装 ARL(Asset Reconnaissance Lighthouse,资产侦察灯塔系统),可以按照以下步骤进行操作: 前提条件: 确保服务器已安装 Docker 和 Docker Compose 服务器需要有至少 2…

实用指南:Java基础(十四):枚举类详解

实用指南:Java基础(十四):枚举类详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

传统开水壶升级智能水壶低成本开发方案WT588F02KD-32N

今天我们要聊的不是什么高深的半导体制造技术,而是一个更贴近我们日常生活的话题——如何让一个普普通通的便携式烧水壶变得"聪明伶俐",不仅能精准控温,还能开口"说话"告诉你水温。 相信经常出…

一般设计网站页面用什么软件餐饮官网建站模板

今天我们来探讨一个重要的话题&#xff1a;短时间内如何顺利通过 Java 面试&#xff1f; 在此之前&#xff0c;我正在精心编写一套完全面向小白的 Java 自学教程&#xff0c;我相信这套教程会非常适合正在努力提升的你。教程里面涵盖了丰富全面的编程教学内容、详细生动的视频…

做产品网站要备案吗贵阳市建设厅网站

凑算式B DEFA --- ------- 10C GHI&#xff08;如果显示有问题&#xff0c;可以参见【图1.jpg】&#xff09;这个算式中A~I代表1~9的数字&#xff0c;不同的字母代表不同的数字。比如&#xff1a;68/3952/714 就是一种解法&#xff0c;53/1972/486 是另一种解法。…

如何自己做购物网站wordpress linux 安装

娱乐行业的主要组织之一的美国影视演员协会&#xff08;SAG&#xff09;最近因云计算的需要选择Windows Azure解决方案。美国影视演员协会将他们的网站从基于Linux的服务器迁移到支持他们的最大年度事件——美国演员工会奖的Windows Azure上。 每年的年度颁奖典礼的到来标志着一…

基于MATLAB的经典车辆路径问题(VRP)求解方法详解

一、数学模型 经典VRP问题: 给定一个配送中心、多个客户点和若干车辆,要求规划车辆路径,使得所有客户需求被满足且总行驶距离/时间最小。核心约束包括:每个客户仅被访问一次 车辆从配送中心出发并返回 车辆容量限制…

kali复现arp欺骗

利用kali复现arp欺骗 本实验旨在帮助学习者理解 ARP 协议工作机制 以及 常见的ARP欺骗攻击原理与防护方法,仅限于 教学和实验环境 使用。实验过程中可能涉及到网络抓包、ARP表修改、ARP欺骗等操作,这些操作在实际生产…