NSSCTF--Crypto--[强网拟态 2021]ONLYRSA

news/2025/3/10 14:52:29/文章来源:https://www.cnblogs.com/chen-xing-zzu/p/18610888

[强网拟态 2021]ONLYRSA

task:

#!/usr/bin/env python
from Crypto.Util.number import *
from secret import flagn = 264048827496427248021277383801027180195275776366915828865010362454006394906519399441496561006668252031429735502465174250525698696973129422193405161920872162928097673289330345041221985548078586423910246601720647996170161319016119241836415788315729493164331517547663558380515400720081995290120793014108439083514403659082115510258023834737471488528527557960636984676435543300074504679264476413252780514962473070445293528877641502742438571110744667739728450283295649865745629276142949963507003094791773183928894536793857609738113546410753895719242547720815692998871947957214118354127328586542848234994500987288641595105
e = 65537
m = bytes_to_long(flag)
c = pow(m,e,n)
print(c)
# 76196483810925191371357319946893762223027002702624516192769497540954799651198719100683206759706879828894501526423422596543748404479640715319801018211652987852179907519286760601944889601355220646374788026632971331786307898234821477134265724962397355614076896148563340833323366935479885600112872998594315513803419069126624158092821269145991266528158747750965226483644012365861166608598063649804899693010576080857540523307078138634628539419178875838147396170651777949577793359622498517581948006585916952705460782942977789615065947303447566918741750017127110484065354974088489869377128636357092420660532261674969708694

analysis:

这道RSA告诉我们的信息少之又少,我们能做的就是想尽办法分解n之后进行解密。

方法一:

# -*- coding: utf-8 -*-
# @Author  : chen_xing
# @Time    : 2024/12/16 上午11:59
# @File    : [强网拟态 2021]ONLYRSA.py
# @Software: PyCharm
from Crypto.Util.number import *
# Given values
n = 264048827496427248021277383801027180195275776366915828865010362454006394906519399441496561006668252031429735502465174250525698696973129422193405161920872162928097673289330345041221985548078586423910246601720647996170161319016119241836415788315729493164331517547663558380515400720081995290120793014108439083514403659082115510258023834737471488528527557960636984676435543300074504679264476413252780514962473070445293528877641502742438571110744667739728450283295649865745629276142949963507003094791773183928894536793857609738113546410753895719242547720815692998871947957214118354127328586542848234994500987288641595105
c = 76196483810925191371357319946893762223027002702624516192769497540954799651198719100683206759706879828894501526423422596543748404479640715319801018211652987852179907519286760601944889601355220646374788026632971331786307898234821477134265724962397355614076896148563340833323366935479885600112872998594315513803419069126624158092821269145991266528158747750965226483644012365861166608598063649804899693010576080857540523307078138634628539419178875838147396170651777949577793359622498517581948006585916952705460782942977789615065947303447566918741750017127110484065354974088489869377128636357092420660532261674969708694
# factor
primes = [5,29,31,197,12541,4811988280952344246576937,304081130082418831034791698146581643331044047712028910273173568327362370621651464924047927850720915897334538205155796477275515888954493777509372421863858817079340724222044305450451984754173948523380921443850440010226012354226083642718433164324022575599948330147718863789069,16249579302136675275737472669394168521026727339712083110552530420348131906271518040549529167354613121510156841352658645018277766962773342379074137176993546193979134201416444089373463960664685121485689105129185197998903479181913613273443541075619342246119648308939006396145123630152777688592984718084919469059]
print("--------------------------------------------------begin--------------------------------------------------")
phi = 1
for prime in primes:if isPrime(prime):phi *= prime - 1else:print("Factor error!")n //= prime
print(long_to_bytes(pow(c,inverse(65537,phi),n)))
print("---------------------------------------------------end---------------------------------------------------")
# b'flag{5c066086-178b-46a7-b0f8-f1afba6f2910}'

方法二:

前备知识:

a.digits(b)函数是对于sagemath中Integer类型的处理方法,接受两个参数a,ba转化为b进制之下的结果之后每一位都储存在列表中(逆序),例如:

print(150.digits())
# [0,5,1]

R.<x> = PolynomialRing(ZZ)可以创建一个以整数环 ZZ 为系数的多项式环,变量为 x

f = R(a):将 a 列表作为多项式的系数列表,生成一个多项式。例如,如果 a = [1, 2, 3],生成的多项式将是 1 + 2x + 3x^2

factor(f)语句可以对f进行整数域上的因式分解,因式分解后的式子是含有x变量的多项式,带入x后就可以得到分解后的值。
这里根据题目October -> December对应十进制 -> 11进制。

转成11进制之后发现稀疏(项数少)。然后就是把11进制看成一个多项式,在多项式环上进行分解,分成两个大多项式相乘,然后再代回11。

exp:

# sagemath
n = 264048827496427248021277383801027180195275776366915828865010362454006394906519399441496561006668252031429735502465174250525698696973129422193405161920872162928097673289330345041221985548078586423910246601720647996170161319016119241836415788315729493164331517547663558380515400720081995290120793014108439083514403659082115510258023834737471488528527557960636984676435543300074504679264476413252780514962473070445293528877641502742438571110744667739728450283295649865745629276142949963507003094791773183928894536793857609738113546410753895719242547720815692998871947957214118354127328586542848234994500987288641595105
e = 65537
c = 76196483810925191371357319946893762223027002702624516192769497540954799651198719100683206759706879828894501526423422596543748404479640715319801018211652987852179907519286760601944889601355220646374788026632971331786307898234821477134265724962397355614076896148563340833323366935479885600112872998594315513803419069126624158092821269145991266528158747750965226483644012365861166608598063649804899693010576080857540523307078138634628539419178875838147396170651777949577793359622498517581948006585916952705460782942977789615065947303447566918741750017127110484065354974088489869377128636357092420660532261674969708694
n_eleven_list = n.digits(11)
R.<x> = PolynomialRing(ZZ)
f = R(n_eleven_list)
factors = f.factor()
p = factors[0][0]
q = factors[1][0]
p = p(x = 11)
q = q(x = 11)
print(f"p = {p}")
print(f"q = {q}")

# -*- coding: utf-8 -*-
# @Author  : chen_xing
# @Time    : 2024/12/16 上午11:59
# @File    : [强网拟态 2021]ONLYRSA.py
# @Software: PyCharm
from Crypto.Util.number import *
# Given values
n = 264048827496427248021277383801027180195275776366915828865010362454006394906519399441496561006668252031429735502465174250525698696973129422193405161920872162928097673289330345041221985548078586423910246601720647996170161319016119241836415788315729493164331517547663558380515400720081995290120793014108439083514403659082115510258023834737471488528527557960636984676435543300074504679264476413252780514962473070445293528877641502742438571110744667739728450283295649865745629276142949963507003094791773183928894536793857609738113546410753895719242547720815692998871947957214118354127328586542848234994500987288641595105
c = 76196483810925191371357319946893762223027002702624516192769497540954799651198719100683206759706879828894501526423422596543748404479640715319801018211652987852179907519286760601944889601355220646374788026632971331786307898234821477134265724962397355614076896148563340833323366935479885600112872998594315513803419069126624158092821269145991266528158747750965226483644012365861166608598063649804899693010576080857540523307078138634628539419178875838147396170651777949577793359622498517581948006585916952705460782942977789615065947303447566918741750017127110484065354974088489869377128636357092420660532261674969708694
p = 16249579302136589695295481114504339262045249125801939374419304404565893699789462299636475519992076209810443523832755415818528536943125532985768629325734679453205207122927745917471850395124342956866284689792620888965652429711989205344392333681297321070276796015579775171010928476523589349812683875326849195595
q = 16249579302136675275737472669394168521026727339712083110552530420348131906271518040549529167354613121510156841352658645018277766962773342379074137176993546193979134201416444089373463960664685121485689105129185197998903479181913613273443541075619342246119648308939006396145123630152777688592984718084919469059
print("--------------------------------------------------begin--------------------------------------------------")
assert p * q == n
if isPrime(p) and isPrime(q):print(long_to_bytes(pow(c,inverse(65537,(p-1)*(q-1)),n)))
elif isPrime(p):print(long_to_bytes(pow(c,inverse(65537,p-1),p)))
else:print(long_to_bytes(pow(c,inverse(65537,q-1),q)))
print("---------------------------------------------------end---------------------------------------------------")

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

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

相关文章

20222314 2024-2025-1 《网络与系统攻防技术》实验八实验报告

20222314 2024-2025-1 《网络与系统攻防技术》实验八实验报告 1. 实验内容 1.1 Web前端HTML 能正常安装、启停Apache。理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML 1.2 Web前端javascipt 理解JavaScript的基本功能,理解DOM 在1的基础上,编写JavaScript验…

CosyVoice 2.0 支持双向流式语音合成;无问芯穹开源全模态理解端侧模型丨RTE 开发者日报

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

分布式锁代码编写问题分析

分布式锁代码编写问题分析 先给大家一段代码示例:@AutowiredRedisson redisson;@GetMapping("/modifyInfo/{id}")public Result modifyInfo(@PathVariable String id) {String lockKey = RedisLockConstant.ERP_CLUE_LOCK + id;RLock rLock = redisson.getLock(lo…

AlmaLinux 10.0 Beta “Purple Lion” - RHEL 二进制兼容免费发行版

AlmaLinux 10.0 Beta “Purple Lion” - RHEL 二进制兼容免费发行版AlmaLinux 10.0 Beta “Purple Lion” - RHEL 二进制兼容免费发行版 由社区提供的免费 Linux 操作系统,RHEL 二进制兼容发行版 请访问原文链接:https://sysin.org/blog/almalinux-10/ 查看最新版。原创作品,…

leetcode2055. 蜡烛之间的盘子 - 前缀和

这道题目作为比较单纯的前缀和题目,不需要额外的一些知识,只需要了解前缀和数组的生成与使用即可,并且也有一定的难度(难度分1819),是一个比较好的前缀和例题。 题干 算术评级: 6第 64 场双周赛Q3 给你一个长桌子,桌子上盘子和蜡烛排成一列。给你一个下标从 0 开始的字符…

云原生周刊:Kubernetes v1.32 正式发布

云原生周刊:Kubernetes v1.32 正式发布 开源项目推荐 Helmper Helmper 简化了将 Helm Charts导入OCI(开放容器倡议)注册表的过程,并支持可选的漏洞修复功能。它确保您的 Helm Charts不仅安全存储,还能及时应用最新的安全修复。该工具完全兼容 OCI 标准,能够方便地与 OCI …

五款实用报表工具推荐:助你轻松搞定数据可视化!

概述 本文将为大家介绍五款功能各异的报表工具,包括山海鲸报表、Canva、BIRT、Chart.js和Metabase。文章详细分析了每款工具的特点、优缺点以及适用场景,帮助企业用户根据自身需求选择合适的报表解决方案,以提高数据分析和可视化能力。 1. 山海鲸报表 简介山海鲸报表是一款国…

三、USB PD物理层

1、定义 物理层(PHY层)定义了USB电源传输的信令技术。本章定义了USB PD设备之间的互操作性所需的PD物理层的电气要求和参数。 2、物理层的功能 USB PD物理层由一对发射机和接收器组成,它们通过单个信号线(CC)进行通信。所有的通信都是半双工的。PHY层实现了避免冲突,以最小…

FineReport模板性能问题排查方法

1. 概述 模板的加载速度受到很多因素影响,如果一个模板预览的时候,加载较慢,该如何去分析问题原因呢? 2. 排查步骤 2.1 查看数据集查询速度 大部分模板加载慢,都是因为 sql 执行速度比较慢。那么如何验证 sql 速度快慢呢?可以使用以下几种方案。 1)在设计器的数据集中直…

模板性能问题排查方法

1. 概述 模板的加载速度受到很多因素影响,如果一个模板预览的时候,加载较慢,该如何去分析问题原因呢? 2. 排查步骤 2.1 查看数据集查询速度 大部分模板加载慢,都是因为 sql 执行速度比较慢。那么如何验证 sql 速度快慢呢?可以使用以下几种方案。 1)在设计器的数据集中直…

【bug】重复请求的幂等问题

问题背景 某验收系统,客户发起验收流程时,由于前端没有做防重点击的限制,导致申请按钮连续点击了多次,重复发起了多条流程 历史逻辑 后端为了保证接口幂等,在发起验收流程的代码中加了几层逻辑如下:判断验收记录状态是否为待发起, 如果不是,则立刻返回失败 发起流程的入…

Deformable DETR

PDF:https://arxiv.org/pdf/2010.04159 Code:https://github.com/fundamentalvision/Deformable-DETR 一、大体内容 前面介绍DETR时,说明了其还存在对小物体检测效果不佳和训练慢的问题,Deformable DETR引入了DCN(Deformable Convolutional Networks)并将其和DETR相结合,借…