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文件类_第1张图片

 

得到:

E=65537

N=439AEAB34EAEE973E968EBDD11D6D3EF7302072C4BFD4F7FE2B0CF9889277F6D

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

RSA解密-提供enc和pem文件类_第2张图片

于是,我们得到 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文件类_第3张图片

得到P=3487583947589437589237958723892346254777

       Q=8767867843568934765983476584376578389

第四步:求出D

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

#coding=utf-8
import math
import sys
from Crypto.PublicKey import RSA
arsa=RSA.generate(1024)
arsa.p=
arsa.q=
arsa.e=
arsa.n=arsa.p*arsa.q
Fn=long((arsa.p-1)*(arsa.q-1))
i=1
while(True):
    x=(Fn*i)+1
    if(x%arsa.e==0):
           arsa.d=x/arsa.e
           break
    i=i+1
private=open('private.pem','w')
private.write(arsa.exportKey())
private.close()

 

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

第五步:解密

在kali终端输入openssl进入openssl

输入rsautl -decrypt -in flag.enc(密文名称) -inkey private.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。

你可能感兴趣的:(密码学)