• 实验吧—密码学—RSA


    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(我们所求得密钥名称)

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

    是不是很开心!

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

  • 相关阅读:
    jquery,字符串转json对象,json对象转字符串
    Oracle,跳出游标循环
    oracle常用函数使用大全 Oracle除法(转)
    Oracle 数字操作。数字函数。mod(),trunc(),round(),ceil(),floor的使用
    Oracle 和sqlserver 字符串补齐
    js中数组的splice()方法
    详解JavaScript的splice()方法
    使用GDB命令行调试器调试C/C++程序
    代码为什么需要重构
    Spring事务管理要点总结
  • 原文地址:https://www.cnblogs.com/nldyy/p/8594166.html
Copyright © 2020-2023  润新知