buuctf的RSA(二)

1.RSA

知道   flag.enc  和  pub.key,典型的加密、解密

将pub,key  改为pub.txt

打开后发现公钥

在RSA公私钥分解 Exponent、Modulus,Rsa公私钥指数、系数(模数)分解--查错网  进行解密

得到e=65537   

n=86934482296048119190666062003494800588905656017203025617216654058378322103517

在python中转化,模数是16进制的n

然后求p和q

后面来编写脚本

import gmpy2
import rsa
num = "C0332C5C64AE47182F6C1C876D42336910545A58F7EEFEFC0BCAAF5AF341CCDD"
N = int(num,16)
E = 65537
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
D = int(gmpy2.invert(E,(p-1)*(q-1)))
privkey = rsa.PrivateKey(N, E, D, p, q)
with open("C:\\Users\\HP\\Desktop\\flag.enc", "rb+") as file:text = file.read()
message = rsa.decrypt(text,privkey)
print(N)
print(message)

代码核心:

        从一个给定的公钥参数(N 和E)以及私钥的两个质数因子(p和 q)来创建一个 RSA 私钥,并使用这个私钥来解密一个文件。

            代码首先导入 gmpy2和 rsa 模块,然后定义了一系列变量,包括公钥的模数 N、公钥的指数 E、两个质数 p,q,以及通过 gmpy2.invert 函数计算出的私钥指数 D。

           接下来创建一个rsa.PrivateKey  对象,并尝试打开一个加密文件来读取其内容。解密后的消息被存储在 message变量中,最后打印出公钥的模数 N 和解密后的消息。

补充:

   

RSA 加密/解密

     在 RSA 加密/解密过程中,公钥用于加密数据,私钥用于解密数据。在这个例子中,你已经使用了公钥的模数 N 和指数 E 来模拟(尽管没有实际加密过程)公钥,并用私钥的质数因子 p和 q 来计算私钥指数 D,然后用这个私钥来解密一个文件。

RSA 签名/验证签名

      在 RSA 签名/验证签名过程中,私钥用于生成签名,公钥用于验证签名。签名通常附加在原始消息之后,以证明消息的真实性和完整性。

使用 RSA 私钥生成签名的过程大致如下:

  1. 发送者使用哈希函数(如 SHA-256)对原始消息进行哈希处理,得到一个固定长度的哈希值。
  2. 发送者使用其 RSA 私钥和哈希算法对哈希值进行签名,生成一个签名值。
  3. 发送者将原始消息和签名值一起发送给接收者。

      有wp说,这一题属于签名(公钥加签),但是这是错误的,只有拥有私钥的A才能生成有效的签名,所以签名可以作为A的身份验证,这是没有涉及RSA签名及验证,

我们一般说地加签和减签,是说公钥解签,私钥加签

  

   公钥解签:

    当发送者(例如A)想要发送一条消息给接收者(例如B)并确保消息的真实性和完整性时,A会使用自己的私钥对消息进行签名。这个过程通常涉及对消息的哈希值进行加密,生成一个签名。

       A将原始消息和签名一起发送给B

     私钥加签:

           B收到消息和签名后,使用A的公钥对签名进行解密,得到原始消息的哈希值。

           B同时会对原始消息进行哈希运算,得到另一个哈希值。

        如果B使用A的公钥解密签名得到的哈希值和B自己对原始消息进行哈希运算得到的哈希值相同,那么B就可以确认这条消息是由A发送的,并且没有被篡改。

2.RSARoll

   根据题目:

RSA roll!roll!roll!Only number and a-z(don't use editor which MS provide)

先来查一下什么叫Roll?

      这里说得是Roll按行加密,

前面两个 数n,e,后面是密文c

       提醒:不要总是觉得 密文C 就是一连串的字符串,密文C 也可以是分行的,记住不要把分行符删除让 密文C 变为一个字符串。应该按行进行解密

来上脚本

直接输出string,只得到},分析一下,它算了很多次私钥,每一次都使用的d都相同,

虽然没有错误,但引起了混淆

我们修改一下,加上一段

   flag+=string.decode()将每个解密后的字符串追加到flag变量中。这假设了每个密文解密后都直接对应一段可读的文本,并且这些文本片段应该连续拼接。这在实际应用中可能并不总是正确的,特别是如果明文在加密前经过了某种形式的分割或编码.

较好的代码为:

import libnum
from Crypto.Util.number import long_to_byteslist1 = [# ... 你的密文列表 ...
]n = 920139713
q = 18443
p = 49891
e = 19# 计算私钥的d部分,只需要做一次
phi_n = (p - 1) * (q - 1)
d = libnum.invmod(e, phi_n)for i in list1:c = i# 使用相同的d来解密所有的cm = pow(c, d, n)# 可能需要处理填充或转换,这里只是简单地将整数转换为字节string = long_to_bytes(m)print(string)

结果:

合起来就可了

补充:

    欧几里得算法

主要运用在计算模逆元(或乘法逆元)

详细在中国剩余定理 - OI Wiki

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

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

相关文章

innerText和innerHTML的区别

innerHTML和innerText都是元素的属性,通过修改这个元素的属性可以达到修改元素内容的目的。但是二者之间略有不同。具体来说,它们的区别如下: innerHTML可以获取或设置元素内部的HTML内容,包括HTML标签,而innerText则…

LeetCode 79.单词搜索

原题链接:. - 力扣(LeetCode) 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内…

若依前后端分离版本-前后端交互整理

ruoyi-ui与后端交互 方法一:表单 使用 headers: {Content-Type:application/x-www-form-urlencoded}, ruoyi-ui的vue中 //ruoyi-ui的vue中定义 formData: {a: 111,b: 111,c: 1,}, //vue中方法调用 outBound() { empty(this.formData).…

6款网页表白代码6(附带源码)

6款网页表白代码6 前言效果图及部分源码1.爱心倒计时2.一起看星星3.爱心4.爱心(有鼠标移动特效)5.爱心(高级效果)6.爱心(3D效果) 领取源码下期更新预报 前言 大部分人都有喜欢的人,学会这些表白…

蓝桥杯物联网竞赛_STM32L071KBU6_关于sizo of函数产生的BUG

首先现象是我在用LORA发送信息的时候,左边显示长度是8而右边接收到的数据长度却是4 我以为是OLED显示屏坏了,又或者是我想搞创新用了const char* 类型强制转换数据的原因,结果发现都不是 void Function_SendMsg( unsigned char* data){unsi…

微软Edge

微软Edge浏览器概述 功能介绍 微软Edge是一款基于Chromium开源项目的网页浏览器,旨在提供更快的网页加载速度、更高的安全性和更好的用户体验。它支持多种操作系统,包括Windows、macOS、Android和iOS,能够满足不同用户的需求。Edge浏览器拥…

赶紧收藏!2024 年最常见 20道 Redis面试题(三)

上一篇地址:赶紧收藏!2024 年最常见 20道 Redis面试题(二)-CSDN博客 五、Redis的持久化机制是什么? Redis 是一个高性能的键值存储系统,支持多种类型的数据结构,如字符串、哈希、列表、集合、…

python数据类型之字符串

目录 1.字符串概念和注意事项 2.字符串内置函数 3.字符串的索引、切片和遍历 4.字符串运算符 5.字符串常用方法 性质判断 开头结尾判断 是否存在某个子串 大小写等格式转化 子串替换 删除两端空白字符 格式化字符串 分割与合并 6.字符串模板 7.exec 函数 8.字符…

【Linux】-Zookeeper安装部署[17]

简介 apache ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。 除了为Hadoop和H…

2024最新 Jenkins + Docker 实战教程(四) - 编写自己的Springboot项目实现自动化部署

😄 19年之后由于某些原因断更了三年,23年重新扬帆起航,推出更多优质博文,希望大家多多支持~ 🌷 古之立大事者,不惟有超世之才,亦必有坚忍不拔之志 🎐 个人CSND主页——Mi…

VMware Num Lock 总自动切换的问题解决

VMware Num Lock 总自动切换的问题解决 0. 问题描述1. 解决方法 0. 问题描述 使用 VMware 虚拟机时,鼠标在 VMware 和主机之间切换时,总是显示 “Num Lock 开” 和 “Num Lock 关” 的提示框。 1. 解决方法 在 VMware 系统中,按 fn num 统…

0407放大电路的频率响应

放大电路的频率响应 单时间常数RC电路的频率响应中频响应高频响应低频响应全频域响应 放大电路频率响应概述1. 直接耦合放大电路频域响应阻容耦合放大电路频域响应 4.7.1 单时间常数RC电路的频率响应 4.7.2 放大电路频率响应概述 4.7.3 单级共射极放大电路的频率响应 4.7.4 单级…

TOSHIBA UTLH21 属于Unifi NV系列

TOSHIBA UTLH21 是东芝推出的一款工业控制器,属于Unifi NV系列。 这款控制器代表了东芝在工业自动化领域的一次重要进步,它在功能和性能上都超越了现有的V系列控制器。以下是UTLH21的一些主要特点: 高速逻辑与控制能力:UTLH21具…

Spring框架中获取方法参数名称:DefaultParameterNameDiscoverer

DefaultParameterNameDiscoverer 是Spring框架中用于获取方法参数名称的一个类。在Java中,方法的参数名称通常在编译时会丢失,因为Java字节码并不强制要求保留这些信息。Spring提供了一种机制来恢复这些参数名称,这就是通过DefaultParameterN…

IT行业的现状与未来趋势

这里写目录标题 一、引言二、IT行业的现状三、IT行业面临的挑战四、IT行业的未来趋势五、结论 一、引言 信息技术(IT)行业在过去几十年中经历了飞速发展,从早期的计算机硬件和软件开发,到如今涵盖云计算、人工智能、大数据、物联…

深度学习之基于Django+Tensorflow卷积神经网络实时口罩检测系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着全球疫情的持续,佩戴口罩成为了公众日常生活中不可或缺的一部分。特别是在人员密集的…

【python】python社交交友平台系统设计与实现(源码+数据库)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

BEVFuison测试全过程记录

cuda版本10.1 pytorch: 根据cuda版本选择pytorch版本: 1. 创建conda虚拟环境: conda create -y --name mmcv python3.8 conda activate mmcv2. 安装依赖库: pytorch: conda install pytorch1.7.1 torchvision0.8.2 torchaudi…

智能代理四大范式解析

Agent四大范式 在2024年红杉资本人工智能峰会上,著名的人工智能专家吴恩达发表了一场备受关注的演讲,深入探讨了智能代理(agent)的四大范式。这四大范式代表了当前AI技术在不同应用领域中的核心方法和实践,分别是反思(Reflection)、工具使用(Tool Use)、规划(Planni…

特征融合篇 | YOLOv8改进之引入轻量级跨尺度特征融合模块CCFM | 源自RT-DETR

前言:Hello大家好,我是小哥谈。CCFM(Cross-Scale Feature Fusion Module)即为跨尺度特征融合模块。这个模块的作用是将不同尺度的特征通过融合操作整合起来,以增强模型对于尺度变化的适应性和对小尺度对象的检测能力。CCFM可以有效地整合细节特征和上下文信息,从而提高模…