buu RSA 1 (Crypto 第一页)

news2024/11/25 9:32:28

题目描述:

在这里插入图片描述
两个文件,都用记事本打开,记住用记事本打开

pub.key:

-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+
/AvKr1rzQczdAgMBAAE=
-----END PUBLIC KEY-----

flag.enc:

A柪YJ^ 
柛x秥?y[蔜?旭?緃沚

题目分析:

  • 显然第一个文件即时普通的公钥(n,e)解密文件,第二个文件是密文c解密文件,与
    buu [AFCTF2018]可怜的RSA 1 和 buu [HDCTF2019]together 1 很像
  • 公钥解密按套路来,可以用线上工具,也可以用脚本
    1.线上公钥解析网站:
    在这里插入图片描述

2.代码解密(将代码文件和 pub.key文件 放同一个文件夹):

from Crypto.PublicKey import RSA
with open('pub.key','rb') as f:
    key = RSA.import_key(f.read())
    print(key.n)
    print(key.e)
  • 得到:

n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
e = 65537

  • n 分解得 p,q:

p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463

  • 最终便是求密文了,遇到此种一段乱码的直接用python脚本(记住就好,不必深究,挺简单的,记住将代码文件和 flag.enc文件 放同一个文件夹):
with open('flag.enc','rb') as f:
    print(libnum.s2n(f.read()))
  • 最终得到密文c:

c = 29666689760194689065394649908301285751747553295673979512822807815563732622178

  • 自此,所有未知数都已求出,完整代码如下:
from Crypto.PublicKey import RSA
import gmpy2
import libnum

# with open('pub.key','rb') as f:
#     key = RSA.import_key(f.read())
#     print(key.n)
#     print(key.e)
    
n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
e = 65537
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463

# with open('flag.enc','rb') as f:
#     print(libnum.s2n(f.read()))

c = 29666689760194689065394649908301285751747553295673979512822807815563732622178
phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = pow(c,d,n)
print(libnum.n2s(int(m)))
  • 得到 flag{decrypt_256}

收获与体会:

  • 对于求公钥私钥的套路我们已了解,那么接下来我们来总结此种题型下求密文的方法(至今知道的有三种):

1.密文出现一段乱码的用以下代码:

with open('flag.enc','rb') as f:
    print(libnum.s2n(f.read()))

2.密文出现一串类似base64的字符串的有一下两种:
(1)第一种:

f1="R3Noy6r3WLItytAmb4FmHEygoilucEEZbO9ZYXx5JN03HNpBLDx7fXd2fl+UL5+11RCs/y0qlTGURWWDtG66eNLzGwNpAKiVj6I7RtUJl2Pcm3NvFeAFwI9UsVREyh7zIV6sI9ZP8l/2GVDorLAz5ULW+f0OINGhJmZm8FL/aDnlfTElhQ87LPicWpXYoMtyr6WrxjK6Ontn8BqCt0EjQ7TeXZhxIH9VTPWjDmFdmOqaqdVIT+LZemTgLNESwM5nn4g5S3aFDFwj1YiDYl0/+8etvKfOrfoKOwR0CxsRHagwdUUTES8EcHLmMGCxCkDZn3SzmmA6Nb3lgLeSgG8P1A=="
f2="O+rRCXI3aTB6P1rYIOPUdalUp6ujpwEq4I20CoWA+HIL8xxGtqY6N5gpr0guZv9ZgOEAMFnBxOqMdVNnB9GgnhmXtt1ZWydPqIcHvlfwpd/Lyd0XSjXnjaz3P3vOQvR71cD/uXyBA0XPzmnTIMgEhuGJVFm8min0L/2qI7wg/Z7w1+4mOmi655JIXeCiG23ukDv6l9bZuqfGvWCa1KKXWDP31nLbp0ZN2obUs6jEAa1qVTaX6M4My+sks+0VvHATrAUuCrmMwVEivqIJ/nS6ymGVERN6Ohnzyr168knEBKOVj0FAOx3YLfppMM+XbOGHeqdKJRLpMvqFXDMGQInT3w=="
c1 = bytes_to_long(base64.b64decode(f1)) # base64转字节后再转整数
c2 = bytes_to_long(base64.b64decode(f2)) # base64转字节后再转整数

(2)第二种(此种情况可在使用第一种方式下得不到答案的情况下使用,很特殊的一种方式):

import base64
from Crypto.Cipher import PKCS1_OAEP

key = RSA.construct((n, e, d, p, q))
key = RSA.importKey(key.exportKey())
key = PKCS1_OAEP.new(key)

f = 'GVd1d3viIXFfcHapEYuo5fAvIiUS83adrtMW/MgPwxVBSl46joFCQ1plcnlDGfL19K/3PvChV6n5QGohzfVyz2Z5GdTlaknxvHDUGf5HCukokyPwK/1EYU7NzrhGE7J5jPdi0Aj7xi/Odxy0hGMgpaBLd/nL3N8O6i9pc4Gg3O8soOlciBG/6/xdfN3SzSStMYIN8nfZZMSq3xDDvz4YB7TcTBh4ik4wYhuC77gmT+HWOv5gLTNQ3EkZs5N3EAopy11zHNYU80yv1jtFGcluNPyXYttU5qU33jcp0Wuznac+t+AZHeSQy5vk8DyWorSGMiS+J4KNqSVlDs12EqXEqqJ0uA=='
c = base64.b64decode(f)
flag = key.decrypt(c)
print(flag)

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

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

相关文章

Vue中 $attrs、$listeners 详解及使用

$attrs 用于父组件隔代向孙组件传值 $ listeners用于孙组件隔代向父组件传值 这两个也可以同时使用&#xff0c;达到父组件和孙组件双向传值的目的。 A组件&#xff08;App.vue&#xff09; <template><div id"app"><!-- 此处监听了两个事件&…

前端包管理工具:npm,yarn、cnpm、npx、pnpm

包管理工具npm Node Package Manager&#xff0c;也就是Node包管理器&#xff1b; 但是目前已经不仅仅是Node包管理器了&#xff0c;在前端项目中我们也在使用它来管理依赖的包&#xff1b; 比如vue、vue-router、vuex、express、koa、react、react-dom、axios、babel、webpack…

描述性统计

参考文献 威廉 M 门登霍尔 《统计学》 文章目录定性数据的描述方法条形图饼图帕累托图定量数据点图茎叶图频数分布直方图MINITAB 工具在威廉《统计学》一书将统计学分为描述统计学和推断统计学&#xff0c;他们的定义分别如下&#xff1a;描述统计学&#xff1a;致力于数据集的…

人生又有几个四年

机缘 不知不觉&#xff0c;已经来 csdn 创作四周年啦~ 我是在刚工作不到一年的时候接触 csdn 的&#xff0c;当时在学习 node&#xff0c;对 node 的文件相关的几个 api 总是搞混&#xff0c;本来还想着在传统的纸质笔记本上记一下&#xff0c;但是想想我大学记了好久的笔记本…

1.Spring Cloud (Hoxton.SR8) 学习笔记—IDEA 创建 Spring Cloud、配置文件样例

本文目录如下&#xff1a;一、IDEA 创建 Spring Cloud 基本步骤创建父项目 (Project)创建子模块 (Module)Spring Cloud 中的依赖版本对应关系?Spring Cloud实现模块间相互调用(引入模块)&#xff1f;Maven项目命名规范&#xff08;groupID、artifactid&#xff09;Spring Clou…

如何使用码匠连接 MariaDB

MariaDB 是一个免费的、开源的关系型数据库管理系统&#xff0c;由 MariaDB 的创始人 Michael Widenius 于 2010 年创建。它基于 MariaDB&#xff0c;但在对数据存储的处理中加入了一些自己的特性。MariaDB 相对于 MariaDB 而言&#xff0c;具有更好的性能和更好的兼容性&#…

JavaWeb--案例(Axios+JSON)

JavaWeb--案例&#xff08;AxiosJSON&#xff09;1 需求2 查询所有功能2.1 环境准备2.2 后端实现2.3 前端实现2.4 测试3 添加品牌功能3.1 后端实现3.2 前端实现3.3 测试1 需求 使用Axios JSON 完成品牌列表数据查询和添加。页面效果还是下图所示&#xff1a; 2 查询所有功能 …

3年测试经验,10家企业面试,爆-肝整理软件测试面试题与市场需求......

目录&#xff1a;导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09;前言 现在网上的软件测试…

系统调用——文件操作相关函数

1.open open, creat - open and possibly create a file or device 打开一个文件&#xff0c;也可能创建一个文件&#xff0c;返回文件描述符 //头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> //接口 int open(const char *pa…

python建立图片索引数据库,根据一段文字,找到存放在电脑上最匹配的图片

python建立图片索引数据库&#xff0c;根据一段文字&#xff0c;找到存放在电脑上最匹配的图片 作者&#xff1a;虚坏叔叔 博客&#xff1a;https://xuhss.com 早餐店不会开到晚上&#xff0c;想吃的人早就来了&#xff01;&#x1f604; 一、程序的用处 一键视频 可以根据一…

Vue对Axios网络请求进行封装

一、为什么要对网络请求进行封装&#xff1f; 因为网络请求的使用率实在是太高了&#xff0c;我们有的时候为了程序的一个可维护性&#xff0c;会把同样的东西放在一起&#xff0c;后期找起来会很方便&#xff0c;这就是封装的主要意义。 二、如何进行封装&#xff1f; 1、将…

Promise的理解和使用

Promise是什么 抽象表达 promise 是一门新的技术(ES6规范&#xff09;Promise 是JS中进行异步编程的新解决方案 具体表达 从语法上来说&#xff1a;Promise是一个构造函数从功能上来说&#xff1a;promise对象用来封装一个异步操作并可以获取其成功/失败的结果 回调函数就…

OLE对象是什么?为什么要在CAD图形中插入OLE对象?

OLE对象是什么&#xff1f;OLE对象的意思是指对象连接与嵌入。那为什么要在CAD图形中插入OLE对象&#xff1f;一般情况下&#xff0c;在CAD图形中插入OLE对象&#xff0c;是为了将不同应用程序的数据合并到一个文档中。本节内容小编就来给大家分享一下在CAD图形中插入OLE对象的…

Golang 内存分配原理

引言 golang是谷歌2009年发布的开源编程语言&#xff0c;截止目前go的release版本已经到了1.12&#xff0c;Golang 语言专门针对多处理器系统应用程序的编程进行了优化&#xff0c;使用 Golang 编译的程序可以媲美 C /C代码的速度&#xff0c;而且更加安全、支持并行进程。和其…

机器学习学习记录2:归纳偏好(奥卡姆剃刀原则和NFL定理)

定义对于相同的训练样本&#xff0c;不同学习算法会产生不同的模型&#xff0c;决定其产生模型的&#xff0c;是学习算法本身的“偏好”。此处&#xff0c;书中引入“归纳偏好”的概念&#xff1a;机器学习算法在学习过程中对某种类型假设的偏好&#xff0c;称为"归纳偏好…

CMake编译学习笔记

CMake学习笔记CMake编译概述CMake学习资源CMake编译项目架构cmake指令CMakeList基础准则CMakeList编写项目构建cmake_minimum_required() 和 project()set()find_package()add_executable()aux_source_directory()连接库文件include_directories()和target_include_directories…

1.4 数值运输商中应注意的几个原则

在数值运算中&#xff0c;每步都可能产生误差&#xff0c;我们不可能(也不必要)步步进行分析&#xff0e;下面仅从误差的某些传播规律和计算机字长有限的特点出发,指出在数值运算中必须注意的几个原则&#xff0c;以提高计算结果的可靠性1. 选用数值稳定性好的算法计算机虽然具…

MySQL Show Profile分析

6 Show Profile分析&#xff08;重点&#xff09; Show Profile是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优的测量 官网文档 默认情况下&#xff0c;参数处于关闭状态&#xff0c;并保存最近15次的运行结果 分析步骤&#xff1a; 1、是否…

Flask+VUE前后端分离的登入注册系统实现

首先Pycharm创建一个Flask项目&#xff1a; Flask连接数据库需要下载的包&#xff1a; pip install -U flask-cors pip install flask-sqlalchemy Flask 连接和操作Mysql数据库 - 王滚滚啊 - 博客园 (cnblogs.com) sqlAlchemy基本使用 - 简书 (jianshu.com) FlaskVue前后端分…

最新研究!美国爱荷华州立大学利用量子计算模拟原子核

爱荷华州立大学物理学和天文学教授James Vary&#xff08;图片来源&#xff1a;网络&#xff09;美国爱荷华州立大学物理学和天文学教授James Vary和来自爱荷华州立大学、马萨诸塞州塔夫茨大学&#xff0c;以及美国能源部加利福尼亚州劳伦斯伯克利国家实验室的研究人员&#xf…