RSA公钥文件解密密文

news/2025/3/15 4:58:09/文章来源:https://www.cnblogs.com/arui-li/p/18505339

RSA公钥文件解密密文

做题遇到两个从未见过的文件:

flag.enc pub.txt

.enc文件名扩展名的作用是表明一个文件以某种方式进行了ENC编码或ENC加密(ENC)。在许多情况下,.enc作为第二个扩展名出现(例如,文件名.txt.enc*)。这通常意味着文件的内容已经被替换为加密形式的内容。当然,这使得该文件在原来的关联中无法读取。一个ENC文件不能以任何方式被读取,而且是没有意义的,除非它先被解密。*

该flag文件可能是密文,pub即publickey公钥文件


分析

1.RSA密钥生成

  • 选择两个质数p,q
  • 计算n=p*q
  • 欧拉公式φ(n)=(p-1)(q-1)
  • 选择一个整数e,使得1<e<φ(n),且e和φ(n)互质
  • 计算e关于φ(n)的模逆元d,即ed≡1(mod φ(n))

即可得到公钥pk=(e,n),私钥sk(d,n)

2.RSA加密和解密

  • 给定明文M,加密过程如下:

得到密文C

  • 给定密文C,解密过程如下:

得到明文M

RSA公钥主要有两个信息:模数(modulus)和指数(exponent),也就是我们所说的 n 和 e 。只要有了这两个信息,我们便可以生成公钥,然后使用 rsa 库对数据进行加密

通过脚本

import rsa
key = rsa.PublicKey(modulus, exponent)
print key

但其实得到的是一个pem文件

何为pem

在计算机安全和密码学方面,PEM(隐私增强邮件)文件是一种包含密码信息的常用容器格式。 它可能包含公共证书或整个 SSL 链(私钥和公钥、根证书和中间证书以及最终用户证书)。

PEM这一名称最初来源于电子邮件加密标准,但现在已被更广泛地用于各种数据类型。 它以 base64 编码,具有特定的结构和标头,可显示其包含的数据类型。

PEM 文件的扩展名有 .pem、.crt、.cer 或 .key。它们有一个或多个项目,这些项目通常由标记分隔,如X.509 证书的”—–BEGIN CERTIFICATE—–” 和”—–END CERTIFICATE—–“,或私钥的”—–BEGIN PRIVATE KEY—–” 和”—–END PRIVATE KEY—–“。

可通过该网址http://www.hiencode.com/pub_asys.html得到e,n;当然,还有其他很多方法……

接着,再对n进行分解https://factordb.com/

得到p,q;带入工具,得到d

到这里,已知如下参数:

p = 275127860351348928173285174381581152299q = 319576316814478949870590164193048041239N = 87924348264132406875276140514499937145050893665602592992418171647042491658461e = 65537

通过脚本得出结果

import rsa
import gmpy2c = 1854183526100811878807183372982532818560316522978821358738967769534081571682
p = 285960468890451637935629440372639283459
q = 304008741604601924494328155975272418463
e = 65537
n = 86934482296048119190666062003494800588905656017203025617216654058378322103517
fn = (p - 1) * (q - 1)d = int(gmpy2.invert(e, fn))
key = rsa.PrivateKey(n, e, d, q, p)
with open(r'D:\\pythonlearning\\pythonProject\\b\\flag.enc', 'rb') as f:  f = f.read()print(rsa.decrypt(f, key))

参考:

RSA公钥文件解密密文的原理分析 - 知乎 (zhihu.com)

什么是 .pem 文件?全面指南 - SSL Dragon

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

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

相关文章

2024-2025-1 20241411王思棋《计算机基础与程序设计》第五周学习总结

班级链接 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP作业要求 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK05教材学习内容总结 《计算机科学概论》第六章 一、低级程序设计语言概述 (一)定义与特点 低级程序设计语言是一种更接近计算机硬件的编程语言,…

《计算机基础与程序设计》第五周学习总结

学期(2024-2025-1) 学号(20241412) 《计算机基础与程序设计》第五周学习总结 作业信息个作业属于哪个课程 2024-2025-1-计算机基础与程序设计 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里 2024-2025-1计算机基础与程序设计第五周作业 https:…

20222408 2024-2025-1 《网络与系统攻防技术》实验三实验报告

1.实验内容 1.1回答问题 (1)杀软是如何检测出恶意代码的? ①基于特征码的检测:AV软件厂商搜集最全最新的特征码库,并以此来尝试匹配文件中的一个或几个片段②启发式恶意软件检测:根据片面特征推断,包括行为(如连接恶意网站、开放端口、修改系统文件等),外观(文件签名…

习题6.6

import numpy as np matches = np.array([ [0, 1, 0, 1, 1, 1], # 1队 [0, 0, 0, 1, 1, 1], # 2队 [1, 1, 0, 1, 0, 0], # 3队 [0, 0, 0, 0, 1, 1], # 4队 [0, 0, 1, 0, 0, 1], # 5队 [0, 0, 1, 0, 0, 0] # 6队 ], dtype=int) n = matches.shape[0] closure…

[BUUCTF]喵喵喵

[BUUCTF]喵喵喵 分析 题目是一张图片,打开属性,放入010editor,无果;于是想到LSB隐写 解题 发现一张PNG,但开头不太对劲将其保存txt文件,发现放入010editor并不可以修改开头在某位大佬博客中学到一个方法,如下: 首先,在notepad中打开txt文件Alt按列选择左侧复制,放入Cy…

22207223-王颖对于编写pta答题判题程序的总结

目录 一、前言1.1 知识点1.2 题量1.3 难度 二、答题判题程序12.1 设计与分析2.2 踩坑心得2.3 改进建议 三、答题判题程序23.1 设计与分析3.2 踩坑心得3.3 改进建议 四、答题判题程序34.1 设计与分析4.2 踩坑心得4.3 改进建议 五、总结 一、前言 1.1 知识点 (1)题目集1题目集1中…

Java实现答题判题程序

一、前言 本文介绍了如何使用Java设计实现答题程序,模拟一个小型的测试,要求输入题目信息和答题信息,根据输入题目信息中的标准答案判断答题的结果。本次编程任务通过三次作业实现了从基本的题目管理到完整的测试系统的设计。 第一次作业主要实现了题目信息、试卷信息和答卷…

Hello Web

Hello Web 兄弟们成了!!!我成了!!!在最近一段时间我基本没有发关于Web的博客,但是我一直在学习后端的知识和后端与前端交互的知识!!!从maven到mysql再到jdbc.mybatis,servlet,http,tomcat,终于,终于老子前端的代码可以把数据传到后端的数据库了!!!哈哈哈哈哈哈哈.我一路学习下来…

前三次大作业总结

一、前言 1. 题目一 1.1 知识点 1.1.1 类设计和封装:题目类:设计题号、题目内容和标准答案的基本属性,包含获取和设置方法,支持答案比对方法,用于判断答题是否正确。 试卷类:设计题目列表和题目数量两个属性,包含将题目存储到列表中的方法,能够按题号排序,以便在输出时…

云计算运维-SRE基础篇之安装VMware

一、首先简单总结计算机发展相关历史,详细总结服务器硬件和计算机分类相关知识。 计算机发展简史早期计算工具:从古至今,人类使用过多种计算工具,如算盘、计算尺等。这些工具为后来的机械计算器奠定了基础。 机械计算机时代(17世纪-19世纪):随着技术的发展,出现了更加复…

【Atcoder训练记录】AtCoder Beginner Contest 377

训练情况赛后反思 D题差一点点吧?可能不去乐跑就能写出来了 A题 我们发现 ABC 是字典序单调递增的,字符串先排序再判断是否为 ABC 即可。 #include <bits/stdc++.h> #define int long longusing namespace std;void solve(){string s; cin>>s;sort(s.begin(),s.e…