从零开始学RSA:已知p+q和(p+1)(q+1)和已知p-q和n

 (17)已知p+q和(p+1)(q+1)

题目给出p+q,(p+1)(q+1),e和c。

首先需要求出phi,然后求解d,最后再求解m。

phi = (p-1)(q-1)

    = pq - (p+q) + 1

p+q的值题目已经给出了,接下来只需要求出pq的值即可求出phi的值。题目还给出了(p+1)(q+1),我们考虑下pq是否可以表示为(p+1)(q+1)的形式:

(p+1)(q+1) = pq + p + q + 1    

       = pq + (p+q) + 1

那么pq就可以表示为:

pq = (p+1)(q+1) - (p+q) -1

然后,求解phi的值。

phi = (p-1)(q-1)

    = pq - (p+q) + 1

    = n - (p+q) + 1

最后:

d = gmpy2.invert(e,phi)

m = pow(c,d,n)

完整的解题脚本如下:

#!/usr/bin/python#coding:utf-8import gmpy2from Crypto.Util.number import long_to_bytes#p+q通过p_add_q表示p_add_q = 326429100407681651814978442415826213864753565034919374282004148849764531414964129530662174521568050093736341197400405816551402307458686750141836996345723514698979514133066389538988520826440776264241138888155090851605191090286605183976443204444854546781116840786281855819689375353337207819361769484061133586660#(p+1)(q+1)为了方便用x表示x = 26601616557971867831128918184476970808722471200861600741488181559976427915212193001812160532906370924454473038671991616741424706794741682437728013348910646937734672343325523407437596920797247711273378236903138971315823251358525257853681659038646150834388504990678755552658405772625078429891153401221091704935464031276762725209220275197422069811202440482709667987828399235771854454331605660739185369563297937712412914621262089799368586352843414856752338979163598254668715003106493342377951882955338211218066635494610164992383277776336257215001515405312235576928828485922034700150519853591032361405975195251746299510720c = 24831377919906161196266552704492935537768087456188711284519872226691826290351027606307936414989585764319104737516021733938210516424254235349369088344349700976416957839221585194510124601438798302079231278339823353520868327987552051471031155633165987892206927171527428590536203275545528900845222038924459888879261986663709510987273937159905675940592632023428129764650249246182611973968609631056274792336171105433760493214971141615401120748113420469659787315651721605227003326305005720436114240966565179896456348773794946970503274768701856591123183247406604013805700201562056023223765073732621940021232679124486597812994e = 65537#n = pq = (p+1)(q+1) - (p+q) - 1 = x - p_add_q - 1n = x - p_add_q - 1#phi = (p-1)(q-1) = pq - (p+q) + 1 = n - (p+q) + 1 = n - p_add_q + 1phi = n - p_add_q + 1d = gmpy2.invert(e,phi)m = pow(c,d,n)print(long_to_bytes(m))

运行结果:

flag{e2df5b739abba07ae93403d3915228c9}


 

(18)已知p-q和n

这个题相比于(17)而言,不太容易直接想到转化的等式。

题目给出p-q,n,e和c。

常规的RSA解密步骤:

n = p*q

phi = (p-1)*(q-1)

d = gmpy2.invert(e,phi)

m = pow(c,d,n)

因为n不可分解,所以,我们无法直接得到p和q的值,也就无法得到phi的值。

通过对phi的如下分解可知,如果已知n和p+q便可求得phi的值。

phi = (p-1)*(q-1)

    = p*q - (p+q) + 1

    = n - (p+q) + 1

因为,给了p-q的值,所以,我们需要设法将p+q表示为p-q,进而求得phi的值。

这样,我们就可以求出p+q的值,进而可以求出phi的值。最后就可以求出明文m的值了。

解题脚本如下:

#!/usr/bin/python#coding:utf-8#变量p_add_q:p + q#变量p_sub_q:p - qimport gmpy2from Crypto.Util.number import long_to_bytesn = 27552304606229034903366058815849954030287648695063385362955432137790872571412035824128918674719247737295565001575991597519270789776408208970323808016733976338433371328100880898942106515627607388226912870981180215883273805491209461671730377099185278711453949265641966582563910708529619185885928310168288810488784242368160743359666583499117949407921812317700250240067929572558785431071173411100434109661677786734923283679392823901052633992456780285091988542875991410528415886437666510014123352497264017734716859350294159440761760921548702546470902740121962033241003215821780125194400741190925169397917247376657863011603e = 65537c = 8643831704675414121804983915084443744489969712473300784256427784417167322852556975560503484179280700293119974607254037642425650493676448134024809335297135239994950178868535219541095694358323044214971760829173918774094415933808417722001811285178546917655837402000771685507972240389565704149610032767242977174132826100177368764169367458684152505611469248099487912367364804360878611296860803835816266114046682291529593099394952245852157119233687981777202751472502060481232341206366584532964027749320641690448228420342308891797513656897566100268729012788419021059054907653832828437666012596894150751431936476816983845357p_sub_q = 3216514606297172806828066063738105740383963382396892688569683235383985567043193404185955880509592930874764682428425994713750665248099953457550673860782324431970917492727256948066013701406000049963109681898567026552657377599263519201715733179565306750754520746601394738797021362510415215113118083969304423858p_add_q = gmpy2.iroot(p_sub_q**2 + 4*n, 2)  #iroot()返回值为一个(x,y)元组。其中x为结果值,y为一个bool型变量,如果x为整数,y=True,否则y=False。phi = n - p_add_q[0] + 1d = gmpy2.invert(e,phi)m = pow(c,d,n)print(long_to_bytes(m))

运行结果:

flag{9c0532a253809f180747b6da334b438f}

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

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

相关文章

从OutputStream类看Java中的IO流操作

哈喽,各位小伙伴们,你们好呀,我是喵手。运营社区:C站/掘金/腾讯云;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一…

C#连接S7-200 smart通讯测试

honeytree 一、编程环境 VS2022软件,选择windows窗体应用(.NET FrameWork):​博途TIA/WINCC社区VX群 ​博途TIA/WINCC社区VX群 添加NuGet程序包;S7netplus 二、引用http://S7.net 三、建立PLC链接 S7-200smart和…

使用Docker安装Jenkins

大家好,今天给大家分享如何使用docker安装jenkins,关于docker的安装和常用命令可以参考下面两篇文章,使用docker可以提高资源利用率,能够在不同的环境中轻松迁移和部署应用,在本文中就不过多赘述了。 Docker常用命令 …

工厂模式+策略模式完成多种登录模式的实现

前提 (简单工厂不属于设计模式,而是一种编程思想【抽象一层出来】)工厂方法模式、抽象工厂模式 以上都是为了解耦,如果考虑多个纬度(如需要同时考虑多种电器,多种品牌)则优先考虑抽象工厂。 …

怎么通过Java语言实现远程控制无人售货柜

怎么通过Java语言实现远程控制无人售货柜呢? 本文描述了使用Java语言调用HTTP接口,实现控制无人售货柜,独立控制售货柜、格子柜的柜门。 可选用产品:可根据实际场景需求,选择对应的规格 序号设备名称厂商1智能WiFi控…

ASP.NET网上图书预约系统的设计

摘 要 《网上图书预约系统的设计》是以为读者提供便利为前提而开发的一个信息管理系统,它不仅要求建立数据的一致性和完整性,而且还需要应用程序功能的完备、易用等特点。系统主要采用VB.NET作为前端的应用开发工具,利用SQL Server2000数据…

7-35 有理数均值

题目链接&#xff1a;7-35 有理数均值 一. 题目 1. 题目 2. 输入输出样例 3. 限制 二、代码 1. 代码实现 #include <iostream> using namespace std;// 计算公约数 int calGcd(int a, int b) {int gcd;bool negative false;if (a a / b * b) { // b整除areturn b;}…

Llama3-Tutorial之Llama3本地Web Demo部署

Llama3-Tutorial之Llama3本地 Web Demo部署 Llama3-Tutorial之Llama3本地Web Demo部署章节。 参考&#xff1a; https://github.com/SmartFlowAI/Llama3-Tutorial 1. 环境配置 conda create -n llama3 python3.10conda activate llama3conda install pytorch2.1.2 torchvision0…

【RAG 论文】SKR:Self-Knowledge 指导下的 RAG

论文&#xff1a;Self-Knowledge Guided Retrieval Augmentation for Large Language Models ⭐⭐⭐⭐ Tsinghua, arXiv:2310.05002 文章目录 一、论文速读二、实现细节2.1 数据的收集2.2 引出 LLM 的 Self-Knowledge 的方法1&#xff09;Direct Prompting2&#xff09;In-Cont…

【微服务 开发】微服务介绍,服务拆分,远程调用

微服务 微服务SpringCloud 拆分如何拆分 远程调用 微服务 微服务是一种软件架构风格&#xff0c;它是以专注于单一职责的很多小型项目为基础&#xff0c;组合成复杂的大型应用 单体架构 将业务的所有功能集中在一个项目中进行开发&#xff0c;打成一个包部署 微服务的特征&…

stm32f103zet6_DAC_1_介绍

STM32微控制器系列的DAC&#xff08;数字到模拟转换器&#xff09;功能是其片上外设之一&#xff0c;用于将数字信号转换为模拟信号。DAC在许多应用中都非常有用&#xff0c;例如音频输出、模拟信号生成、闭环控制系统中作为模拟输出等。 STM32微控制器的DAC功能特点包括&…

2024-3-23 青少年软件编程(C语言)等考(三级)解析

2024-3-23 青少年软件编程(C语言)等级考试试卷(三级)解析1、我家的门牌号 我家住在一条短胡同里,这条胡同的门牌号从1开始顺序编号。 若所有的门牌号之和减去我家门牌号的两倍,恰好等于n,求我家的门牌号及总共有多少家。 数据保证有唯一解。 时间限制:1000 内存限制:6…

概率论 科普

符号优先级 概率公式中一共有三种符号&#xff1a;分号 ; 、逗号 , 、竖线 | 。 ; 分号代表前后是两类东西&#xff0c;以概率P(x;θ)为例&#xff0c;分号前面是x样本&#xff0c;分号后边是模型参数。分号前的 表示的是这个式子用来预测分布的随机变量x&#xff0c;分号后的…

(论文阅读-优化器)Orca: A Modular Query Optimizer Architecture for Big Data

目录 摘要 一、简介 二、背景知识 2.1 大规模并行处理 2.2 SQL on Hadoop 三、Orca架构 四、查询优化 4.1 优化工作流 4.2 并行查询优化 五、Metadata Exchange 六、可行性 6.1 Minimal Repros 6.2 优化器准确性测试 七、实验 八、相关工作 8.1 查询优化基础 8…

自动驾驶融合定位:IMU内参模型及标定

自动驾驶融合定位&#xff1a;IMU内参模型及标定 一、 概述 标定的本质是参数辨识。首先明确哪些参数可辨识&#xff0c;其次弄清怎样辨识。 参数包括陀螺仪和加速度计各自的零偏、标度因数、安装误差。 辨识就比较丰富了&#xff0c;如果让各位先不局限于标定任务&#xf…

CasaOS玩客云安装memos开源云笔记并实现随时随地远程记笔记

文章目录 前言1. 使用Docker部署memos2. 注册账号与简单操作演示3. 安装cpolar内网穿透4. 创建公网地址5. 创建固定公网地址 前言 本文主要介绍如何在CasaOS玩客云&#xff0c;使用Docker本地部署21.6K stars的热门开源云笔记服务memos&#xff0c;并结合cpolar内网穿透工具打…

libevent的使用

文章目录 libevent封装的框架思想常用函数分析使用fifo的读写未决和非未决bufferevent特性bufferevent函数客户端和服务器连接和监听libevent实现socket通信 libevent封装的框架思想 libevent框架&#xff1a;1. 创建 event_base (乐高底座)2. 创建 事件evnet 3. 将事件 添加…

c++ 线程概述

C中的线程是并发编程的重要组成部分&#xff0c;它允许程序同时执行多个任务。以下是对C线程的概述&#xff1a; 基本概念&#xff1a; 并发&#xff1a;意味着两个或多个任务同时执行。在单核CPU上&#xff0c;由于只有一个CPU&#xff0c;某一时刻只能执行一个任务&#xff0…

MATLAB 变换

MATLAB 变换&#xff08;Transforms&#xff09; MATLAB提供了用于处理诸如Laplace和Fourier变换之类的变换的命令。转换在科学和工程中用作简化分析和从另一个角度查看数据的工具。 例如&#xff0c;傅立叶变换允许我们将表示为时间函数的信号转换为频率函数。拉普拉斯变换使…

为什么运行vue项目有的是npm run serve 有的是npm run dev

在 Vue.js 项目中&#xff0c;使用 npm run 命令来运行开发服务器是一个常见的做法。然而&#xff0c;具体使用 npm run serve 还是 npm run dev&#xff0c;这取决于项目的配置和所使用的构建工具。 Vue CLI 创建的项目&#xff1a; 如果你使用 Vue CLI 创建一个新项目&#x…