2025能源网络安全大赛CTF --- Crypto wp
文章目录
- 前言
- simpleSignin
- NumberTheory
前言
大半年以来写的第一篇文章!!!
simpleSignin
题目:
from Crypto.Util.number import *
from gmpy2 import *
import osflag = b'xxx'
p = next_prime(bytes_to_long(os.urandom(128)))
q = next_prime(bytes_to_long(os.urandom(128)))
r = next_prime(q)
n = p * q * r
e = 0x10001
print(f"n = {n}")
print(f"c = {pow(bytes_to_long(flag), e, n)}")
print(f"gift1 = {p % (2**10)}")
print(f"gift2 = {(p >> 20) % 2 ** 800}")
# n = 91717197306065801430692774296739087369692505805873730729014813677164858033475119219496549179322145782790263228034134781592967028480301579462111507372893508636592832600206391905790511488678949157112322777098684707325311891056750963286494634489093620270797637437274546909400418496263799669541769586017282231886023275686719495040493703402244867906367008837217453500300992995258096509545406775279177918160331853363991834113918051468978309081085686108283547874975768959542753094631595260890420558364636303078263220001513817844063960023424429484568985727987064710176511050208253838039386390968276801658300795687804601169987051671314061987254212363117325786734328360418591971610392966867659045907550755979167652038093091970078722854251659581538266806207906127491377972897441916942048136016416739633568604447564119372465662628724153812001753748410162478969725179843125714619352895967577899670208386148053595763674920185320834513587
# c = 53725206995000716522893276595058419071990290621803579636161714383330892673055811337947487241701642126496591685585109862245420917684160662867863785840324861826954623093740844326627026833476771622577100464186879804184565843869885634004202583123814660253474988365767802371596929119773493402264073966760818738577604694066757843772483509464516822006312737285138313587227005339175914335841617310097530993158296079585719772401849963001042345007495440110071538584261056055469925721208755935971137618873034799819342505088130217626174789908762309465751064851354313099531229991764250968313733026934453793364342598912519963653648573385780950148182927905527658001218917373163825532068287661941387464083148002185635404194796699532320249403305428191157038659625440168989244227207215946636349083290983113055351713899941081154804665455470002453942340935361232121886299764516109079270616076269084847241248414373185392810503507977061708566426
# gift1 = 513
# gift2 = 5077110719426498428662246006638349628986894614097694065336047422264042823893900747327210766546701290926253205743419412459378571920759093322149140413682875156857171051511499793127787270654329155934268596972449238336868326196360992252498463385
根据代码可知,gift2和gift1分别为p的低820-20bit和低10bit,因此当我们通过爆破获取到低20-10bit的时候,此时为一个p的低位泄露问题。对于1024bit的p,泄露820bit完全够copper了,我们可以通过copper计算出高204bit即可还原p
from Crypto.Util.number import *
import gmpy2
from tqdm import *
n = 91717197306065801430692774296739087369692505805873730729014813677164858033475119219496549179322145782790263228034134781592967028480301579462111507372893508636592832600206391905790511488678949157112322777098684707325311891056750963286494634489093620270797637437274546909400418496263799669541769586017282231886023275686719495040493703402244867906367008837217453500300992995258096509545406775279177918160331853363991834113918051468978309081085686108283547874975768959542753094631595260890420558364636303078263220001513817844063960023424429484568985727987064710176511050208253838039386390968276801658300795687804601169987051671314061987254212363117325786734328360418591971610392966867659045907550755979167652038093091970078722854251659581538266806207906127491377972897441916942048136016416739633568604447564119372465662628724153812001753748410162478969725179843125714619352895967577899670208386148053595763674920185320834513587
c = 53725206995000716522893276595058419071990290621803579636161714383330892673055811337947487241701642126496591685585109862245420917684160662867863785840324861826954623093740844326627026833476771622577100464186879804184565843869885634004202583123814660253474988365767802371596929119773493402264073966760818738577604694066757843772483509464516822006312737285138313587227005339175914335841617310097530993158296079585719772401849963001042345007495440110071538584261056055469925721208755935971137618873034799819342505088130217626174789908762309465751064851354313099531229991764250968313733026934453793364342598912519963653648573385780950148182927905527658001218917373163825532068287661941387464083148002185635404194796699532320249403305428191157038659625440168989244227207215946636349083290983113055351713899941081154804665455470002453942340935361232121886299764516109079270616076269084847241248414373185392810503507977061708566426
leak = 5077110719426498428662246006638349628986894614097694065336047422264042823893900747327210766546701290926253205743419412459378571920759093322149140413682875156857171051511499793127787270654329155934268596972449238336868326196360992252498463385
e = 65537
PR.<x> = PolynomialRing(Zmod(n))
for i in trange(2**10):p_low = (leak<<20)+(i<<10)+513f = x*2**820+p_lowroot = f.monic().small_roots(X=2^204,beta=0.33)if root:p = int(root[0]*2**820+p_low)if n%p==0:phi = p-1d = inverse_mod(e,phi)m = pow(c,d,p)flag = bytes.fromhex(hex(m)[2:])print(flag)break
NumberTheory
题目:
from Crypto.Util.number import *
import hintflag=b'xxx'
e=65537
p=getPrime(512)
q=getPrime(512)
n=p*q
m=bytes_to_long(flag)
c=pow(m,e,n)
k=getPrime(1024)
assert hint + 233 * k == 233 * k * p
print(n)
print(c)
print(hint)# 105531804094410236294687082475828411218788143973352026416392542762437103918840861241726193253936370648195682452618343195471719649394086997793137653518966739212122830015579955183805636213883066694989610003565432493653164047938048521354525623612253955387430773546124647105772639376194421783783651686606080214099
# 6838127295540107402282470465780599628759317234806902778570348919850980664834107227012249617036087381075344016550381137159643512672239826438903241091658619314078921936719784123522758604349399440232971511649918093228288847534685526358191804172060250409498531941883162873696671060909325234109062997554795436940
# 225457129615945961139095949356083106510992163176770860368085043522677811094793442173512565115313130227614423196268240217775831118417780318014842280209747426271227826513967791945116378179885000662888744992914390207196310600996050316737090999399962338133222370745589250853315876818226312453376340282748842779666176953455553054310328901299083159029050169950812885486884682347263045764918907196922313892044095742248895091717187372068779768743879411865275203496650858608
根据题目名字,顾名思义:数论
已知等式, h i n t + 233 k = 233 k p 已知等式,hint+233k=233kp 已知等式,hint+233k=233kp
⇒ 233 k × ( p − 1 ) = h i n t \Rightarrow 233k\times(p-1)=hint ⇒233k×(p−1)=hint
那么,则有,任意正整数a
a h i n t = a 233 k × ( p − 1 ) a^{hint} = a^{233k\times(p-1)} ahint=a233k×(p−1)
此时,在模上一个p的情况下
a h i n t m o d p = a 233 k × ( p − 1 ) m o d p a^{hint} mod \space p = a^{233k\times(p-1)} mod \space p ahintmod p=a233k×(p−1)mod p
根据费马小定理,可得
a h i n t m o d p ≡ 1 m o d p a^{hint} mod \space p \equiv 1 \space mod \space p ahintmod p≡1 mod p
a h i n t m o d p − 1 = k p a^{hint} mod \space p -1 = kp ahintmod p−1=kp
∵ n = p × q \because n = p\times q ∵n=p×q
∴ g c d ( a h i n t , n ) = p \therefore gcd(a^{hint},n)=p ∴gcd(ahint,n)=p
求出p之后,直接RSA解密即可
from Crypto.Util.number import *
import gmpy2n = 105531804094410236294687082475828411218788143973352026416392542762437103918840861241726193253936370648195682452618343195471719649394086997793137653518966739212122830015579955183805636213883066694989610003565432493653164047938048521354525623612253955387430773546124647105772639376194421783783651686606080214099
c = 6838127295540107402282470465780599628759317234806902778570348919850980664834107227012249617036087381075344016550381137159643512672239826438903241091658619314078921936719784123522758604349399440232971511649918093228288847534685526358191804172060250409498531941883162873696671060909325234109062997554795436940
hint = 225457129615945961139095949356083106510992163176770860368085043522677811094793442173512565115313130227614423196268240217775831118417780318014842280209747426271227826513967791945116378179885000662888744992914390207196310600996050316737090999399962338133222370745589250853315876818226312453376340282748842779666176953455553054310328901299083159029050169950812885486884682347263045764918907196922313892044095742248895091717187372068779768743879411865275203496650858608
e = 65537
p = gmpy2.gcd(pow(5,hint,n)-1,n)
q = n//p
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
flag = long_to_bytes(m)
print(flag)
下午应该还上了一个格的题目,以后有空再写
相关文章:

2025能源网络安全大赛CTF --- Crypto wp
文章目录 前言simpleSigninNumberTheory 前言 大半年以来写的第一篇文章!!! simpleSignin 题目: from Crypto.Util.number import * from gmpy2 import * import osflag bxxx p next_prime(bytes_to_long(os.urandom(128))…...
【网络安全】网络钓鱼的类型
1. 网络钓鱼简介 网络钓鱼是最常见的社会工程学类型之一,它是一种利用人为错误来获取私人信息、访问权限或贵重物品的操纵技术。之前,您学习了网络钓鱼是如何利用数字通信诱骗人们泄露敏感数据或部署恶意软件的。 有时,网络钓鱼攻击会伪装成…...
Android学习总结之扩展基础篇(一)
一、IdleHandler工作原理 1. IdleHandler 接口定义 IdleHandler 是 MessageQueue 类中的一个接口,定义如下: public static interface IdleHandler {/*** 当消息队列空闲时会调用此方法。* return 如果返回 true,则该 IdleHandler 会保留在…...

Godot开发2D冒险游戏——第二节:主角光环整起来!
变量的作用域 全局变量,局部变量,导出变量(可以在检查器当中快速查看) 为玩家添加移动动画 现在游戏的玩家还只是在滑行,我们需要再添加玩家每个方向上的移动效果 删除原先的Item节点,创建一个动画精灵…...

.NETCore部署流程
资料下载:https://download.csdn.net/download/ly1h1/90684992 1.下载托管包托管捆绑包 | Microsoft Learn,下载后点击安装即可。 2.安装IIS 3.打开VS2022,新建项目,选择ASP.NET Core Web API 5.Program修改启动项,取…...

数据结构——二叉树,堆
目录 1.树 1.1树的概念 1.2树的结构 2.二叉树 2.1二叉树的概念 2.2特殊的二叉树 2.3二叉树的性质 2.4二叉树的存储结构 2.4.1顺序结构 2.4.2链式结构 3.堆 3.1堆的概念 3.2堆的分类 3.3堆的实现 3.3.1初始化 3.3.2堆的构建 3.3.3堆的销毁 3.3.4堆的插入 3.3.5…...
Java面试实战:音视频场景下的微服务架构与缓存技术剖析
文章标题 Java面试实战:音视频场景下的微服务架构与缓存技术剖析 文章内容 第一轮提问 面试官: 谢先生,请问您对Spring Boot框架熟悉吗?它有哪些核心特性? 谢飞机: 熟悉,Spring Boot的核心特性包括自动配置、嵌入…...

龙虎榜——20250424
指数依然是震荡走势,接下来两天调整的概率较大 2025年4月24日龙虎榜行业方向分析 一、核心主线方向 化工(新能源材料产能集中) • 代表标的:红宝丽(环氧丙烷/锂电材料)、中欣氟材(氟化工&…...
大学生如何学好人工智能
大学生学好人工智能需要从多个方面入手,以下是一些建议: 扎实掌握基础知识 - 数学基础:人工智能涉及大量数学知识,要学好线性代数、概率论、数理统计、微积分等课程,为理解复杂的算法和模型奠定基础。 - 编程语言&…...
实时步数统计系统 kafka + spark +redis
基于微服务架构设计并实现了一个实时步数统计系统,采用生产者-消费者模式,利用Kafka实现消息队列,Spark Streaming处理实时数据流,Redis提供高性能数据存储,实现了一个高并发、低延迟的数据处理系统,支持多…...

CentOS 7 安装教程
准备: 软件:VMware Workstation 镜像文件:CentOS-7-x86_64-bin-DVD1.iso (附:教程较为详细,注释较多,故将操作的选项进行了加粗字体显示。) 1、文件–新建虚拟机–自定义 2、硬盘…...

Python+AI提示词出租车出行轨迹预测:梯度提升GBR、KNN、LR回归、随机森林融合及贝叶斯概率异常检测研究
原文链接:tecdat.cn/?p41693 在当今数字化浪潮席卷全球的时代,城市交通领域的海量数据如同蕴藏着无限价值的宝藏等待挖掘。作为数据科学家,我们肩负着从复杂数据中提取关键信息、构建有效模型以助力决策的使命(点击文末“阅读原文…...

直接偏好优化(Direct Preference Optimization,DPO):论文与源码解析
简介 虽然大规模无监督语言模型(LMs)学习了广泛的世界知识和一些推理技能,但由于它们是基于完全无监督训练,仍很难控制其行为。 微调无监督LM使其对齐偏好,尽管大规模无监督的语言模型(LMs)能…...
2025/4/23 心得
第一题。 习题2.1.9 最少翻转次数 题目描述 给定一个01序列,小x每次可以翻转一个元素,即将该元素从0变1或者从1变0。 现在小x希望最终序列是不下降序列,即不会存在相邻两个元素,左边元素的值比右边元素的值大。 请你帮小x求最…...
dmncdm达梦新云缓存数据库主从集群安装部署详细步骤说明
dmncdm达梦新云缓存数据库主从集群安装部署详细步骤说明 1 环境介绍2 安装部署dmncdm2.1 196部署cdm环境2.2 197部署cdm环境2.3 190部署cdm环境 3 主备集群/主从集群配置4 部署主备集群/主从集群5 部署日志6 更多达梦数据库全方位指南:安装 优化 与实战教程 1 环境介绍 cpu x8…...

UE5.2+VarjoXR3,Lumen、GI、Nanite无效的两种解决方案
一、问题描述 最近在做一个基于VarjoXR3的VR项目开发,UE版本使用的是5.2,效果采用Lumen。首先在PC版本中调整了一个效果,但是当切换到VR运行后,就发现Lumen效果就丢失了。但是测试的其他的头显就没有问题,比如Quest。…...

PH热榜 | 2025-04-24
1. Peek 标语:AI个人财务教练,帮你做出明智的财务决策。 介绍:Peek的人工智能助手能够主动进行财务检查,分析你的消费模式,并以一种细腻而积极的方式帮助你改善习惯。完全没有评判,也没有负罪感。就像为你…...
利用 SSE 实现文字吐字效果:技术与实践
利用 SSE 实现文字吐字效果:技术与实践 引言 在现代 Web 应用开发中,实时交互功能愈发重要。例如,在线聊天、实时数据监控、游戏中的实时更新等场景,都需要服务器能够及时将数据推送给客户端。传统的请求 - 响应模式在处理实时性要求较高的场景时显得力不从心,而 Server…...
POSIX多线程
在计算机编程的广阔领域中,POSIX 标准就像是一把通用的钥匙,开启了跨平台编程的大门。POSIX,即 Portable Operating System Interface(可移植操作系统接口) ,是 IEEE 为了规范各种 UNIX 操作系统提供的 API…...
济南国网数字化培训班学习笔记-第二组-1节-输电线路工程
输电线路工程 输电 电网定义 将发电场采集的电能通过输电线路传输到用户终端。由输电线路、变电站和配电网络等组成。 六精四化 安全、质量、进度、造价、技术、队伍 标准化,模块化,机械化,智能化 发展历程 1908-22kv-石龙坝水电-昆明…...

相机雷达外参标定算法调研
0. 简介 相机与激光雷达的外参标定是自动驾驶、机器人等领域的基础工作。精准的标定不仅有助于提高数据融合的效果,还能提升算法的整体性能。随着技术的发展,许多研究者和公司致力于开发高效的标定工具和算法,本文将对无目标标定和有目标标定…...

网络原理 - 7(TCP - 4)
目录 6. 拥塞控制 7. 延时应答 8. 捎带应答 9. 面向字节流 10. 异常情况 总结: 6. 拥塞控制 虽然 TCP 有了滑动窗口这个大杀器,就能够高效可靠的发送大量的数据,但是如果在刚开始阶段就发送大量的数据,仍然可能引起大量的…...
JAVA---面向对象(上)
今天写重生之我开始补知识 第二集 面向对象编程:拿东西过来做对应的事。 设计对象并使用 1.类和对象 类(设计图):是对象共同特征的描述; 对象:是具体存在的具体东西; 如何定义类…...

idea连接远程服务器kafka
一、idea插件安装 首先idea插件市场搜索“kafka”进行插件安装 二、kafka链接配置 1、检查服务器kafka配置 配置链接前需要保证远程服务器的kafka配置里边有配置好服务器IP,以及开放好kafka端口9092(如果有修改 过端口的开放对应端口就好) …...

Linux操作系统--基础I/O(上)
目录 1.回顾C文件接口 stdin、stdout、stderr 2.系统文件I/O 3.接口介绍 4.open函数返回值 5.文件描述符fd 5.1 0&1&2 1.回顾C文件接口 hello.c写文件 #include<stdio.h> #include<string.h>int main() {FILE *fp fopen("myfile","…...
IOMUXC_SetPinMux的0,1参数解释
IOMUXC_SetPinMux(IOMUXC_ENET1_RX_DATA0_FLEXCAN1_TX, 0); 这里的第二个参数 0 实际上传递给了 inputOnfield,它控制的是 SION(Software Input On)位。 当 inputOnfield 为 0 时,SION 关闭,此时引脚的输入/输出方向由…...
go 的 net 包
目录 一、net包的基本功能 1.1 IP地址处理 1.2 网络协议支持 1.3 连接管理 二、net包的主要功能模块 2.1 IP地址处理 2.2 TCP协议 2.3 UDP协议 2.4 Listener和Conn接口 三、高级功能 3.1 超时设置 3.2 KeepAlive控制 3.3 获取连接信息 四、实际应用场景 4.1 Web服…...

weibo_har鸿蒙微博分享,单例二次封装,鸿蒙微博,微博登录
weibo_har鸿蒙微博分享,单例二次封装,鸿蒙微博 HarmonyOS 5.0.3 Beta2 SDK,原样包含OpenHarmony SDK Ohos_sdk_public 5.0.3.131 (API Version 15 Beta2) 🏆简介 zyl/weibo_har是微博封装使用,支持原生core使用 &a…...

【MySQL数据库入门到精通-06 DCL操作】
一、DCL DCL英文全称是Data Control Language(数据控制语言),用来管理数据库用户、控制数据库的访 问权限。 二、管理用户 1.查询与创建用户 代码如下(示例): -- DCL 管理用户 -- 1.查询用户 use mysql; select *from user;-…...
第55讲:农业人工智能的跨学科融合与社会影响——构建更加可持续、包容的农业社会
目录 一、农业人工智能的多维融合:科技与社会的桥梁 1. 技术与社会:解决现代农业中的不平等 2. AI与伦理:塑造道德规范与社会责任 3. AI与政策:推动农业政策的科学决策与智能执行 二、AI与农业未来社会的构建:更绿色、更智能、更包容 1. 推动农业可持续发展:绿色农…...