[鹤城杯 2021]BabyRSA

题目:

from Crypto.Util.number import getPrime, bytes_to_long
from secret import flagp = getPrime(1024)
q = getPrime(1024)
n = p * q
e = 65537
hint1 = p >> 724
hint2 = q % (2 ** 265)
ct = pow(bytes_to_long(flag), e, n)
print(hint1)
print(hint2)
print(n)
print(ct)hint1= 1514296530850131082973956029074258536069144071110652176122006763622293335057110441067910479
hint2= 40812438243894343296354573724131194431453023461572200856406939246297219541329623
n= 21815431662065695412834116602474344081782093119269423403335882867255834302242945742413692949886248581138784199165404321893594820375775454774521554409598568793217997859258282700084148322905405227238617443766062207618899209593375881728671746850745598576485323702483634599597393910908142659231071532803602701147251570567032402848145462183405098097523810358199597631612616833723150146418889589492395974359466777040500971885443881359700735149623177757865032984744576285054725506299888069904106805731600019058631951255795316571242969336763938805465676269140733371287244624066632153110685509892188900004952700111937292221969
ct= 19073695285772829730103928222962723784199491145730661021332365516942301513989932980896145664842527253998170902799883262567366661277268801440634319694884564820420852947935710798269700777126717746701065483129644585829522353341718916661536894041337878440111845645200627940640539279744348235772441988748977191513786620459922039153862250137904894008551515928486867493608757307981955335488977402307933930592035163126858060189156114410872337004784951228340994743202032248681976932591575016798640429231399974090325134545852080425047146251781339862753527319093938929691759486362536986249207187765947926921267520150073408188188
解题分析:
因此根据题目中给出的p高300位和q低265位,n=pq  =>  n=p0q0(mod 2265)可得p低265位 p0=nq0-1(mod 2265)
题目中q0= q%(2265)=hint2  =>  q0-1= inverse_mod(q0,2265)
则p低265位p0=n*inverse_mod(q0,2265)(mod 2265)
则p的高300位和低265位之和为:
pbar=ph+pl=(p1<<724) + n*inverse_mod(q0,2265)(mod 2265)
p中间的459位通过copperSmith求解
由于构造f=pbar+x*2265无解,尝试对2265抬高2^6(即抬高64)进行爆破
则 f需要加上i*2265,其中i in range(64)
所以在copperSmith构造中,f表达式中间项为x*64*2265,对应small_roots参数X=2453

sage:

#sage
p1 = 1514296530850131082973956029074258536069144071110652176122006763622293335057110441067910479
q0 = 40812438243894343296354573724131194431453023461572200856406939246297219541329623
n = 21815431662065695412834116602474344081782093119269423403335882867255834302242945742413692949886248581138784199165404321893594820375775454774521554409598568793217997859258282700084148322905405227238617443766062207618899209593375881728671746850745598576485323702483634599597393910908142659231071532803602701147251570567032402848145462183405098097523810358199597631612616833723150146418889589492395974359466777040500971885443881359700735149623177757865032984744576285054725506299888069904106805731600019058631951255795316571242969336763938805465676269140733371287244624066632153110685509892188900004952700111937292221969
p0=n*invert(q0,2^265)%(2^265)
pbar=(p1<<724)+p0PR.<x> = PolynomialRing(Zmod(n))
for i in range(64):f=pbar+x*(2^265)*64 + i*(2^265)f=f.monic()pp=f.small_roots(X=2^453,beta=0.4)if(pp):print("pp[0]=",pp[0])print("i=",i)breakp=pbar+pp[0]*64*(2^265)+ i*(2^265)
print("p=",p)

python:

#python
from Cryptodome.Util.number import *
import libnum
from gmpy2 import gmpy2hint1 = 1514296530850131082973956029074258536069144071110652176122006763622293335057110441067910479
hint2 = 40812438243894343296354573724131194431453023461572200856406939246297219541329623
n = 21815431662065695412834116602474344081782093119269423403335882867255834302242945742413692949886248581138784199165404321893594820375775454774521554409598568793217997859258282700084148322905405227238617443766062207618899209593375881728671746850745598576485323702483634599597393910908142659231071532803602701147251570567032402848145462183405098097523810358199597631612616833723150146418889589492395974359466777040500971885443881359700735149623177757865032984744576285054725506299888069904106805731600019058631951255795316571242969336763938805465676269140733371287244624066632153110685509892188900004952700111937292221969
ct = 19073695285772829730103928222962723784199491145730661021332365516942301513989932980896145664842527253998170902799883262567366661277268801440634319694884564820420852947935710798269700777126717746701065483129644585829522353341718916661536894041337878440111845645200627940640539279744348235772441988748977191513786620459922039153862250137904894008551515928486867493608757307981955335488977402307933930592035163126858060189156114410872337004784951228340994743202032248681976932591575016798640429231399974090325134545852080425047146251781339862753527319093938929691759486362536986249207187765947926921267520150073408188188
e = 65537
p=133637329398256221348922087205912367118213472434713498908220867690672019569057789598459580146410501473689139466275052698529257254973211963162087316149628000798221014338373126500646873612341158676084318494058522014519669302359038980726479317742766438142835169562422371156257894374341629012755597863752154328407
q=n//p
phi_n=(p-1)*(q-1)
d = gmpy2.invert(e,phi_n)
m = pow(ct,d,n)
print(long_to_bytes(m))

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

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

相关文章

3大法则教你高效制定奖励规则(含参考案例)

在实施全民分销的过程中&#xff0c;SaaS产品方和合作伙伴推广者之间的合作关系可以用河马与牛椋鸟之间的共生关系来形容——牛椋鸟以栖息在河马背上并清理其身上的昆虫为生。这种关系对两者来说都是极其有益的&#xff1a;牛椋鸟获得了稳定的食物来源&#xff0c;而河马则有效…

使用宝塔面板部署Django应用(不成功Kill Me!)

使用宝塔面板部署Django应用 文章目录 使用宝塔面板部署Django应用 本地操作宝塔面板部署可能部署失败的情况 本地操作 备份数据库 # 备份数据库 mysqldump -u root -p blog > blog.sql创建requirements # 创建requirements.txt pip freeze > requirements.txt将本项目…

梳理Y3游戏编辑器入门者需要明白的基础概念

前言 Y3编辑器是网易开发的一款类似于“War3地图编辑器”的产品。 最近KK对战平台上不少热门的RPG地图都出自Y3编辑器&#xff1a; 最近我花了些时间学习了这款编辑器的基础知识。我发现其中很多概念是比较抽象需要理解的&#xff0c;而有些概念比如“物件”、“物体”、“物…

【CSS】background-clip属性的作用是什么,怎么使用?

CSS中的background-clip属性主要用于控制背景的渲染区域&#xff0c;即指定元素背景所在的区域。具体来说&#xff0c;它决定了背景图像或颜色应该在哪些区域被裁剪或显示。 background-clip属性的使用方法&#xff1a; 属性值&#xff1a; border-box&#xff1a;默认值。背景…

二叉树-根据先序遍历和中序遍历序列重建二叉树

目录 一、问题描述 二、解题思路 1.首先明确先序遍历和中序遍历的性质&#xff1a; 2.确定根节点及左右子树 3.对子树进行递归操作 4.递归返回条件 三、代码实现 四、刷题链接 一、问题描述 二、解题思路 1.首先明确先序遍历和中序遍历的性质&#xff1a; 先序遍历&am…

Excel和Word等工具小技能分享汇编(一)

这里汇集刘小生前期微信公众号分享的Excel和Word等工具小技能&#xff0c;为方便大家查看学习&#xff0c;刘小生对其进行分类整理&#xff0c;后期也会不定期整理更新&#xff0c;如有想学习交流或其他小技巧需求&#xff0c;欢迎留言&#xff0c;我们一起学习进步&#xff01…

探索比特币多面体

目录 前言 一、比特币挖矿 1.挖矿设备的演化 2.矿池 二、比特币脚本 1.交易结构 2.交易的输入 3.交易的输出 4.P2PK 输入输出脚本的形式 实际执行情况 5.P2PKH 输入输出脚本的形式 实际执行情况 6.P2SH 输入输出脚本的形式 7.进一步说明 8.多重签名 9.脚本执…

DBA常用论坛

1.ITPUB ITPUB技术论坛_专业的IT技术社区 2.ASKTOM Ask TOM

2024 6.10~6.16 周报

一、上周工作 完成毕设 二、本周计划 吴恩达的机器学习、实验-回顾之前密集连接部分&#xff0c;调整损失函数 三、完成情况 3.1 机器学习的两种主要类型&#xff1a; 监督学习&#xff08;supervised learning&#xff09;&#xff08;实际中使用最多的&#xff09;&…

shell 查看第700行的内容

在Shell中&#xff0c;如果你想查看一个文本文件的第700行内容&#xff0c;可以使用sed命令或者head结合tail命令来实现。下面是两种方法&#xff1a; 使用sed命令 sed -n 700p 文件名 这里的-n选项告诉sed不要打印所有行&#xff0c;而700p表示只打印第700行。 使用head和tai…

Python 使用print输出二进制文件时产生的错位

项目实践中&#xff0c; with open(fileName, rb) as f: result f.read()print(result)f.close()打开二进制文件&#xff0c;打印出的结果会出现有些\x后面有好几个字符的情况 但实际这串数字是 这种情况是因为print函数将二进制数据解释为字符串并以其字节值的十六进制表…

Java中如何自定义异常进行抛出,并且定义全局异常处理类进行捕获异常(详细讲解)?

1.先理解为什么要抛出异常&#xff1f; 一句话就是为了终止程序&#xff0c;一般是终止业务层也就是service层。 2.为什么要自定义异常抛出&#xff1f; 因为系统提供的异常种类很多&#xff0c;而且代表的含义很多&#xff0c;所以我们需要自己定义一个通用的异常&#xff0…

白帽子最喜欢用什么渗透测试工具?看看哪些是你用过的

一、白帽子最喜欢用什么安全工具? 2020 年的 HackerOne 黑客报告中,统计过白帽子们最喜欢用的软硬件工具。 从图中可以看到,89% 的白帽子都会使用 Burp Suite 这个 Web 应用安全测试工具,有 39% 会尝试自己写工具,第三名的 Fuzzers 是模糊测试工具。再后面主要是一些代理…

STM32-17-DAC

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD STM32-15-DMA…

k8s学习--OpenKruise详细解释以及原地升级及全链路灰度发布方案

文章目录 OpenKruise简介OpenKruise来源OpenKruise是什么&#xff1f;核心组件有什么&#xff1f;有什么特性和优势&#xff1f;适用于什么场景&#xff1f; 什么是OpenKruise的原地升级原地升级的关键特性使用原地升级的组件原地升级的工作原理 应用环境一、OpenKruise部署1.安…

ThreadLocal 详讲

ThreadLocal ThreadLocal是一个将在多线程中为每一个线程创建单独的变量副本的类; 当使用ThreadLocal来维护变量时, ThreadLocal会为每个线程创建单独的变量副本, 避免因多线程操作共享变量而导致的数据不一致的情况。 ThreadLocal 使用 public class ThreadLocalTest {priv…

ssm宠物网站系统-计算机毕业设计源码07183

摘 要 在信息飞速发展的今天&#xff0c;网络已成为人们重要的信息交流平台。宠物网站每天都有大量的信息需要通过网络发布&#xff0c;为此&#xff0c;本人开发了一个基于B/S&#xff08;浏览器/服务器&#xff09;模式的宠物网站系统。 该系统以JJava编程语言、MySQL和SSM框…

Linux sudo -i取消密码的方法

直接修改 /etc/sudoers 文件来实现 sudo -i 无需密码的配置。以下是具体步骤&#xff1a; 步骤 打开终端并使用 visudo 命令编辑 /etc/sudoers 文件 使用 visudo 编辑 sudoers 文件是推荐的方法&#xff0c;因为它会在保存前进行语法检查&#xff0c;防止出现配置错误。 sudo …

基于 VITA57.1 标准的 2 收 2 发射频子卡(国产 ADRV9009子卡)

FMC159 是一款基于 VITA57.1 标准规范&#xff0c;实现 2 收 2 发的射频子模块&#xff0c;该板卡基于国产化 ADRV9009 射频收发器&#xff0c;涵盖了50MHz~6GHz 频段&#xff0c;并集成了双通道收发链路&#xff0c;发送最大实时带宽可到 450MHz&#xff0c;接收最大带宽可以到…

十进制、二进制、十六进制之间的相互转换

实验目的 实现int 、float 转换为字符串并显示 实现数字字符以二进制、十进制、十六进制显示 实现十进制、二进制、十六进制之间的相互转换 #include "numconvert.h" #include "ui_numconvert.h"NumConvert::NumConvert(QWidget *parent): QWidget(parent)…