码迷,mamicode.com
首页 > 其他好文 > 详细

实验吧—密码学—RSA

时间:2018-03-18 12:07:37      阅读:1902      评论:0      收藏:0      [点我收藏+]

标签:rom   body   介绍   压缩包   压缩   理解   break   16进制   ssl   

RSA破解

解题链接: http://ctf5.shiyanbar.com/crypto/RSA

 

1.点击链接得到一个压缩包。点击开里面有两个文件,分别是flag.enc和public.pem这两个文件。

   首先我们会想到openssl。

openssl:是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

一般做RSA 的题只需用到两个命令到时候我们在详细说明。

2.打开kali(kali里的openssl可以直接使用,但windows下的需要花钱。)

 进入终端,输入openssl进入openssl状态。

技术分享图片

输入这个命令rsa -pubin -text -modulus -in public.pem(public.pem 是你自己的文件名)读取N 和E。

技术分享图片

我们看到了N=A41006DEFD378B7395B4E2EB1EC9BF56A61CD9C3B5A0A73528521EEB2FB817A7

                  E=65537

我们首先将N转换成10进制,在这里我使用了python的进制转换函数 int(x,16)。将16进制转换成10进制。

技术分享图片

于是我们得到了N=74207624142945242263057035287110983967646020057307828709587969646701361764263

3.分解N得出P和Q以便求出私钥D

  在这里介绍两种方法。(当然我也只会这两种,本人纯小白一枚,python都不太会写)

  第一种:http://factordb.com/这个网站。输入N基本会分解出P和Q。技术分享图片

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

首先打开cmd,进入yafu所在路径,输入yafu-64的命令,进入yafu工作阶段。输入factor(74207624142945242263057035287110983967646020057307828709587969646701361764263)点击回车会出现

技术分享图片

这样我们就得到了P=258631601377848992211685134376492365269

                             Q=286924040788547268861394901519826758027

4.求出D

可在这里我通过工具求出了D 但无法在openssl中进行解开密文。因为题中所给的密文是flag.enc我们正常没有办法打开。而用openssl对其进行解密需要按其格式来的密钥,即pem后缀。当然脑洞不小的我,尝试将D放入txt文件中,在进行改文件名。但在openssl中无法使用。我又查了各种enc后缀结尾文件的打开命令,但没有搜到什么。于是找了一下,发现可以用pythonq来写生成可用的私钥。

于是我们来写吧。(之前说过不会python,所以代码借鉴于http://blog.csdn.net/dongyanwen6036/article/details/76900001。)

import math
import sys
from Crypto.PublicKey import RSA
arsa=RSA.generate(1024)
arsa.p=258631601377848992211685134376492365269
arsa.q=286924040788547268861394901519826758027
arsa.e=65537
arsa.n=arsa.p*arsa.q
Fn=long((arsa.p-1)*(arsa.q-1))

#此处原理e*d=Fn*i+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文件。至此我们找到了D

5.解密

在kali终端输入openssl进入openssl

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

技术分享图片

看这样我们就得到明文了!

是不是很开心!

 

 

注:本人纯属小白,为了自己更好的理解,和掌握知识。不喜勿喷。

 

实验吧—密码学—RSA

标签:rom   body   介绍   压缩包   压缩   理解   break   16进制   ssl   

原文地址:https://www.cnblogs.com/nldyy/p/8594166.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!