[山海关crypto 训练营 day13]

news2024/12/25 23:48:03

日常鼓励自己:世界上只有想不通的人,没有走不通的路。

[长安杯 2021]checkin

题目代码和数据

from Crypto.Util.number import *
from secret import flag
p = getPrime(1024)
q = getPrime(16)
n = p*q
m = bytes_to_long(flag)
for i in range(1,p-q):
    m = m*i%n
e = 1049
print(pow(2,e,n))
print(pow(m,e,n))
#4513855932190587780512692251070948513905472536079140708186519998265613363916408288602023081671609336332823271976169443708346965729874135535872958782973382975364993581165018591335971709648749814573285241290480406050308656233944927823668976933579733318618949138978777831374262042028072274386196484449175052332019377
#3303523331971096467930886326777599963627226774247658707743111351666869650815726173155008595010291772118253071226982001526457616278548388482820628617705073304972902604395335278436888382882457685710065067829657299760804647364231959804889954665450340608878490911738748836150745677968305248021749608323124958372559270

解题思路

c 1 = 2 e   m o d   n 2 e = k ∗ n + c 1 c_1=2^e \ mod \ n \\ 2^e=k*n+c_1 c1=2e mod n2e=kn+c1
这时候我们可以先搞出来n
代码如下:

c1=4513855932190587780512692251070948513905472536079140708186519998265613363916408288602023081671609336332823271976169443708346965729874135535872958782973382975364993581165018591335971709648749814573285241290480406050308656233944927823668976933579733318618949138978777831374262042028072274386196484449175052332019377
e=1049

print(2^e-c1)
#6027543349128250261061611850906664728536346779212426641088428544963356731129810885082371555056594134371892601742424667721105193534249189043570046638983977639217990098126731016259348067349430430582215063864805103884037137420179826541116808264617091019826898653792245614592655285387965751855503038673696439312640921935

这时候我们把这个大数进行分解。
在这里插入图片描述这时候根据代码中给出的 p , q p,q p,q的范围,猜测

q=34211,p=170229264879724117919007372149468684565431232721075153274808454126426741324966131188484635914814926870341378228417496808202497615585946352638507704855332363766887139815236730403246238633855524068161116748612090155595549964229654262432946553891601975628848891407847198187453488358420350203927771308228162321231

接下来就是基础的RSA恢复出 m m m
代码如下:

import gmpy2
import binascii

q=34211
p=170229264879724117919007372149468684565431232721075153274808454126426741324966131188484635914814926870341378228417496808202497615585946352638507704855332363766887139815236730403246238633855524068161116748612090155595549964229654262432946553891601975628848891407847198187453488358420350203927771308228162321231
c=3303523331971096467930886326777599963627226774247658707743111351666869650815726173155008595010291772118253071226982001526457616278548388482820628617705073304972902604395335278436888382882457685710065067829657299760804647364231959804889954665450340608878490911738748836150745677968305248021749608323124958372559270
phi=(p-1)*(q-1)

e=1049

d=gmpy2.invert(e,phi)

m=pow(c,d,p*q)

print(m)

#5647131855912861445959801473000904046916562928699152081503080575758020426807957155823449252476576485215605683437266835890889011723740507176262565985183961657923735947392895594055836719225094244682238166397289805533546643921357507282330115996821590563351999699513990659441764547850652946624613062168133173839972115

这时候根据这个m还原flag
关键代码在这

for i in range(1,p-q):
    m = m*i%n

这里要用到威尔逊理论,具体思路如下:
令  ( p − 1 ) ! ≡ − 1   m o d   p , m ∗ ( p − q − 1 ) ! ≡   M   m o d   p 两式相除得到: − 1 / M ≡ 1 / m ∗ ( p − q ) ∗ ( p − q + 1 ) ∗ . . . ∗ ( p − 1 )   m o d   p m ≡ − M ∗ ( p − q ) ∗ ( p − q + 1 ) . . . ( p − 1 )   m o d   p 令\ (p-1)! \equiv -1\ mod \ p ,m*(p-q-1)! \equiv \ M \ mod \ p \\ 两式相除得到:\\ -1/M \equiv 1/m*(p-q)*(p-q+1)*...*(p-1) \ mod \ p \\ m \equiv -M*(p-q)*(p-q+1)...(p-1) \ mod \ p  (p1)!1 mod p,m(pq1)! M mod p两式相除得到:1/M1/m(pq)(pq+1)...(p1) mod pmM(pq)(pq+1)...(p1) mod p
具体求解代码如下:

q=34211
p=170229264879724117919007372149468684565431232721075153274808454126426741324966131188484635914814926870341378228417496808202497615585946352638507704855332363766887139815236730403246238633855524068161116748612090155595549964229654262432946553891601975628848891407847198187453488358420350203927771308228162321231
m=1
M=5647131855912861445959801473000904046916562928699152081503080575758020426807957155823449252476576485215605683437266835890889011723740507176262565985183961657923735947392895594055836719225094244682238166397289805533546643921357507282330115996821590563351999699513990659441764547850652946624613062168133173839972115
for i in range(p-q,p):
    m = m*i%p
# print(m)
from Crypto.Util.number import *
m=(-M)*m%p
print(long_to_bytes(m))

#b"flag{7h3_73rr1b13_7h1ng_15_7h47_7h3_p457_c4n'7_b3_70rn_0u7_by_175_r0075}"

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

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

相关文章

事务AOP

事务&AOP 事务管理 在数据库中我们已经学过事务了。 事务是一组操作的集合,它是不可再分的工作单位。事务会把所有的操作作为一个整体,一起向数据库提交或者撤销操作请求。所以这组操作要么是同时成功,要么同时失败。 事务的操作主要…

【共用体和枚举】

共用体 一种构造类型的数据结构 共用体和结构体类似,也是一种构造类型的数据结构。 既然是构造类型的,就需要先定义出类型,然后用类型定义变量。 定义共用体类型的方法和结构体非常相似,把struct 改成union 就可以了。 在进行某…

美颜SDK的应用与优化:一次全面探究

在直播过程中,美颜技术可以帮助主播实现更好的视觉效果,从而吸引更多的关注和粉丝。因此,直播美颜SDK的应用和优化已经成为了直播行业中的一个重要研究方向。 一、直播美颜SDK的应用 1. 美颜滤镜 美颜滤镜是直播美颜SDK中最常用的一种技术…

【Mybatis】Mybatis处理一对多、多对多关系映射-四

唠嗑部分 上篇文章我们说了Mybatis中ORM映射的几种方式,相关文章: 【Mybatis】简单入门及工具类封装-一 【Mybatis】如何实现ORM映射-二 【Mybatis】Mybatis的动态SQL、缓存机制-三 这篇文章我们来说说Mybatis如何处理一对一、一对多、多对多的关系映射…

Linux下网络编程(2)——socket的函数们

accept()函数 服务器调用 listen()函数之后,就会进入到监听状态,等待客户端的连接请求,使用 accept()函数获取客户端的连接请求并建立连接。函数原型如下所示: int accept(int sockfd, struct sockaddr *addr, socklen_t *addrle…

RK3588光电载荷处理板研制进展

本来就是一个很小众的市场,但是偶尔也会有同行询问,这儿就简单汇报一下后期的进展 板子已经开发完成,并有幸得到了两个订单,虽然量不是很大,但是也很开心由于一段时间的努力和付出,将该设备应用在了国防事业…

【Linux】Linux文件目录结构

Linux文件目录结构 在 Linux 中,其文件目录结构是一颗类似于多叉树的结构,所有目录都在 / (根目录)下面,每个非叶节点代表一个目录,叶节点代表文件。 一般结构如下所示: usr :“Unix Software …

LitCTF 2023 - crypto复现

文章目录 Hex?Hex!梦想是红色的原来你也玩原神factordbP_Leake的学问Euler* Where is P?The same common divisormd5babyLCG* easy_math* Virginia* Is this only base?你是我的关键词(Keyworld)隐晦的聊天记录* baby_xor收获与体会 Hex?He…

RabbitMQ入门 安装 SpringAMQP简单队列、工作队列、发布订阅(扇出模式,广播模式)、Direct模式(Roting模式)、Topic模式

一、RabbitMQ介绍 1. MQ介绍 1. 为什么要有MQ 同步调用与异步调用 程序里所有的通信,有两种形式: 同步通信:通信时必须得到结果才会执行下一步 异步通信:通信时不必等待结果,可以直接处理下一步 同步调用 解析&…

IPWorks EDI 2022 .NET Edition 22.0.8 Crack

IPWorks EDI基于用于安全 EDI 通信(AS2、SFTP、OFTP、RosettaNet、MLLP 等)的领先 EDI-INT 协议,IPWorks EDI 库包含促进安全 EDI 消息传递以及 EDI 映射、翻译和验证(X12、 EDIFACT、HL7、TRADACOMS、VDA、XML 和 JSON&#xff0…

Mybatis基础操作

文章目录 一. Mybatis单表操作删除操作查询操作#{} 与 ${}的区别更新操作新增操作 二. Mybatis多表操作 一. Mybatis单表操作 删除操作 我们接着使用昨天的表和程序,我们来实现通过id删除数据: 我们这样就可以实现将id 1的数据进行删除了,…

FE_JS对象的理解

对象是JS中的引用数据类型,对象是一种复合数据类型,在对象中可以保存多个不同数据类型的属性。使用typeof检查一个对象时,会返回object。 1 对象创建模式 - Object构造函数模式 套路: 先创建空Object对象, 再动态添加属性/方法 适用场景: 起…

【LeetCode: 1335. 工作计划的最低难度 | 暴力递归=>记忆化搜索=>动态规划 】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

又一个开源便斩获 7k star 的新模型「GitHub 热点速览」

作者:HelloGitHub-小鱼干 Star 并不能代表什么,但是绝对能表示一个项目的受欢迎程度。就像刚开源一周就有 7k star 的新模型,输入文本 / 图像就能获得 3D 对象。除了这个新模型,本周还有一款新的 Web 3D 渲染引擎 Orillusion&…

MySQL学习---17、MySQL8其它新特性

1、MySQL新增特性 1.1 更简便的NoSQL支持 NoSQL泛指非关系型数据库和数据存储。随着互联网平台的规模飞速发展,传统的关系型数据库已经越来越不能瞒住需求。从5.6版本开始,MySQL就开始支持简单的NoSQL存储功能。MySQL 8对这一功能做了优化,…

阿里P8强烈推荐的可伸缩服务架构:框架与中间件笔记

随着企业业务量的增加,流量洪峰在不断挑战着业务系统的承载能力,设计高并发、可伸缩的系统已成为软件架构师的紧迫任务,而分布式、可伸缩的架构模式已成为抵御洪峰的有效方案之一。本书汇集了作者在多年核心系统开发中的架构及实践经验&#…

【算法】--- 几分钟带你走进排序算法大门(上)

文章目录 前言🌟一、常见的排序算法:🌟二、直接插入排序排序:📒2.1 基本思想:📒2.2 代码:📒2.3 时间复杂度:O(N^2)📒2.4 流程图详解: …

聚观早报 | Midjourney官方在QQ开启内测;富士康印度新工厂动工

今日要闻:Midjourney官方在QQ开启内测;富士康印度新工厂动工;闲鱼将开收软件服务费;专家建议五年内禁售燃油车;笑果文化已被立案调查 Midjourney官方在QQ开启内测 5 月 15 日,据 Midjourney AI 微信公众号…

Unity之OpenXR+XR Interaction Toolkit实现 手枪模型的拆卸和组装

前言 之前我们曾实现过PC端的模型的拆卸和组装,如果使用VR模式来实现物体的拆卸呢?如何使用双手手柄来控制物体,拆卸物体呢?今天我们就来实现一个VR小Demo,基于OpenXR ,XR Interaction Toolkit插件来实现。…

程序员面试宝典

前言 编者: 大淘宝技术开发工程师 / 刘苏宏(淘苏) 淘苏(花名)目前是大淘宝技术的一名开发工程师。从国企 跳槽来到互联网,【职业规划】是他被问得最多,也思考得 最多的问题。 扫一扫,关注公众号【大淘宝技术】 了解更多大淘宝技术干货沉淀 …