RSA公钥文件解密密文

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 = 275127860351348928173285174381581152299

q = 319576316814478949870590164193048041239

N = 87924348264132406875276140514499937145050893665602592992418171647042491658461

e = 65537

通过脚本得出结果

import rsa
import gmpy2

c = 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

posted @ 2024-10-26 23:30  阿瑞LI  阅读(67)  评论(0编辑  收藏  举报