BUUCTF re rsa做法(提供enc和key)

embedded/2024/10/22 14:43:54/

首先我们需要安装个一些东西,即gmpy2,Linux安装流程如下

首先安装依赖库

gmp库:apt-get install libgmp-dev

mpfr库:apt-get install libmpfr-dev

mpc库:apt-get install libmpc-dev

安装gmpy2:pip install gmpy2

个别人可能会报错,输入:sudo apt-get install libmpc-de   进行依赖库更新和检查

首先对文件进行解压,得到 pub.key和flag.enc两个文件,第一步进行openssl的使用,从pub.key

文件中提取出数字n和e(后文会将讲sa算法原理)

输入:openssl rsa -pubin -text -modulus  -in pub.key

得出e=6557,n=0xC0332C5C64AE47182F6C1C876D42336910545A58F7EEFEFC0BCAAF5AF341CCDD

我们此时需要将n变成十进制,利用python进行变化,得到

n=86934482296048119190666062003494800588905656017203025617216654058378322103517

然后将n拆成两个p和q,这边进入网站factordb.com进行拆分,得到

p=285960468890451637935629440372639283459

q=304008741604601924494328155975272418463

此后还需要下载一个rsatool工具,下载完之后,我们如下操作

先是cd rsatool进入该文件夹,然后输入

python3 rsatool.py -f PEM -o private.pem -p 285960468890451637935629440372639283459 -q 304008741604601924494328155975272418463 -e 65537

就可以得到一个私钥文件,后缀是pem,如下图所示

即为创建成功,最后将pub.key,flag.enc和private.pem放入rsatool文件夹中,

输入:openssl pkeyutl -decrypt -in flag.enc -inkey private.pem -out flag.txt

最后,输入:ls  ,在输入:cat flag.txt   就能得到flag{decrypt_256}

先来个小总结:

当解压为两个附件时,一个为enc还有一个key,首先一段指令,得到e和n,然后再将n拆成p和q

然后生成一个pem文件,然后将这些文件放一起,最后得出flag.txt文件

RSA算法原理:(脚本解密原理)

信息接收方产生公钥pl和私钥sk,公钥可以给任何人,私钥自己保存

信息发送方将要发送的信息m和公钥pk一起用特定的算法进行加密,即密文

信息接收方接收到密文c,用私钥sk进行特定的解密算法回复明文

RSA算法流程

选择两个质数p和q,算出乘积n=p*q,算出对应的欧拉函数

选择一个e,使其与算出来的欧拉函数对应

e,n为公钥,d,n为私钥,明文长度小于n

加密,密文=pow(m,e)%n

解密,明文=pow(c,d)%n

如何辨别rsa算法呢?

在加密函数中看是否出现pow(a,b)%c

解法

找密文c

找n=p*q,

找到公钥e

解密操作


http://www.ppmy.cn/embedded/129582.html

相关文章

最新 client-java 调用 k8s ApiServer

创建权限绑定 sa-role.yaml apiVersion: v1 kind: ServiceAccount metadata:name: my-admin #账号名namespace: kube-system--- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata:annotations:rbac.authorization.kubernetes.io/autoupdate: "true…

Neo4j 构建文本类型的知识图谱

Neo4j 是一个强大的图数据库,用于构建和查询各种类型的图数据结构。构建知识图谱是一项常见任务,尤其在处理自然语言处理 (NLP) 和文本信息时。基于 Neo4j,可以将文本数据转换为知识图谱,使得复杂的文本关系以图结构存储&#xff…

UE4 材质学习笔记12(水体反射和折射)

一.水体反射和折射 首先就是要断开所有连接到根节点的线,因为水有很多不同的节点成分,当所有其他节点都在用时 要分辨出其中一个是何效果是很难的。 虚幻有五种不同的方法可以创建反射,虚幻中的大多数场景使用多种这些方法 它们会同时运作。…

数据飞轮:唤醒沉睡的数据中台,驱动企业业务增长的关键

数据飞轮:唤醒沉睡的数据中台,驱动企业业务增长的关键 文章目录 数据飞轮:唤醒沉睡的数据中台,驱动企业业务增长的关键数据驱动的核心:数据消费企业利用数据飞轮唤醒沉睡数据实现数据驱动的技术数据中台人工智能和机器…

SqlSugar查询达梦数据库时搜索不到列值为NULL的记录

使用SqlSugar连接达梦数据库&#xff0c;查询异常状态的表记录&#xff0c;最初的代码如下所示&#xff1a; db.Queryable<AppUsers>().Where(r > r.UserName ! "aaa").Select(r > new AppUsers { UserName r.UserName })能搜到数据&#xff0c;但是不…

代替AD作为身份认证组件,深信服零信任aTrust与宁盾身份目录实现互操作

9月25日&#xff0c;经深信服科技股份有限公司和上海宁盾信息科技有限公司共同严格测试&#xff1a;宁盾身份目录服务软件能够与深信服零信任访问控制系统 aTrust 兼容对接运行&#xff0c;双方相互兼容&#xff0c;共同为企事业单位提供身份和零信任管理需求。 本次测试包含了…

Linux使用nc(netcat)命令检测网络端口是否畅通以及Linux查看CPU架构命令arch及CentOS中取版本的问题

一、Linux使用nc(netcat)命令检测网络端口是否畅通 nc命令netcat的简写&#xff0c;netcat即是网络猫的意思&#xff0c;在linux系统中nc命令实际执行命令是ncat。nc命令是一个功能强大的网络工具。平常主要用于实现TCP/UDP端口的侦听和收发&#xff0c;nc可作为server以TCP或U…

RestClient查询文档排序、分页和高亮

目录 排序、分页 高亮 高亮请求构建 高亮结果解析 排序、分页 搜索结果的排序和分页是与query同级的参数&#xff0c;因此同样是使用request.source()来设置。 对应的API如下&#xff1a; 完整代码示例&#xff1a; Test void testPageAndSort() throws IOException {// …