首页
登录 | 注册

RSA解密-提供enc和pem文件类

                                            RSA解密

                                                       ——提供enc和pem文件类

        解压文件包发现两个文件,flag.enc和pub.pem两个文件。首先我们会想到openssl。这类题目需要用linux的openssl来解。openssl是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

第一步:在kali中使用命令:

openssl rsa -pubin -text -modulus -in warmup -in pub.pem

RSA解密-提供enc和pem文件类

 

得到:

E=65537

N=439AEAB34EAEE973E968EBDD11D6D3EF7302072C4BFD4F7FE2B0CF9889277F6D

第二步:我们把N转换成10进制,在这里我使用了python的进制转换函数 int(x,16)。将16进制转换成10进制。

RSA解密-提供enc和pem文件类

于是,我们得到 N=30578675145816634962204467309994126955968568987449100734690153203822106214253

第三步:分解N得出P和Q以便求出私钥D

       这里的话暂时来说有两种方法,第一种:http://factordb.com/这个网站。输入N基本会分解出P和Q。但也有时候输入N分解不出P和Q,那么久用第二种方法。

第二种方法:

       软件yafu:用于自动整数因式分解,在RSA中,当p、q的取值差异过大或过于相近的时候,使用yafu可以快速的把n值分解出p、q值,原理是使用Fermat方法与Pollard rho方法。

首先打开cmd,进入yafu所在路径,输入yafu-64的命令,进入yafu工作阶段。输入

factor(30578675145816634962204467309994126955968568987449100734690153203822106214253)然后回车

RSA解密-提供enc和pem文件类

得到P=3487583947589437589237958723892346254777

       Q=8767867843568934765983476584376578389

第四步:求出D

在kali中使用python生成私钥,脚本如下:

# coding=utf-8

import math

import sys

from Crypto.PublicKey import RSA

keypair = RSA.generate(1024)

keypair.p =3487583947589437589237958723892346254777

keypair.q =8767867843568934765983476584376578389

keypair.e = 65537

keypair.n = keypair.p * keypair.q

Qn = long((keypair.p-1) * (keypair.q-1))

i = 1

while (True):

    x = (Qn * i ) + 1

 if (x % keypair.e == 0):

keypair.d = x / keypair.e

break

i += 1

private = open('private.pem','w')

private.write(keypair.exportKey())

private.close()

在kali中运行后会在home中生成一个名为private.pem的文件

第五步:解密

在kali终端输入openssl进入openssl

输入rsautl -decrypt -in flag.enc(密文名称) -inkey private.pem(我们所求得密钥名称)

RSA解密-提供enc和pem文件类

得到flag。

        总结来说,解决此类RSA解密的题目(提供enc和pem文件类)步骤还是比较固定的,得到flag一般需要五步。

第一步:在kali中使用命令:openssl rsa -pubin -text -modulus -in warmup -in pub.pem得到E和N的值。

第二步:使用python把16进制的N转换成10进制。

第三步:分解N得出P和Q以便求出私钥。

第四步:在kali中使用python脚本生成私钥D。

第五步:在kali终端输入openssl进入openssl输入rsautl -decrypt -in flag.enc(密文名称) -inkey private.pem(我们所求得密钥名称)得到flag。



2020 jeepxie.net webmaster#jeepxie.net
10 q. 0.008 s.
京ICP备10005923号