zoukankan      html  css  js  c++  java
  • 攻防世界-crypto-Normal_RSA(openssl和rsatool工具解密RSA)

    进入题目后下载附件,发现是2个文件,flag.enc和pubkey.pem。猜测分别为加密后的flag和RSA公钥。

    其中,pubkey.pem文件内容如下:

    -----BEGIN PUBLIC KEY-----
    MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMJjauXD2OQ/+5erCQKPGqxsC/bNPXDr
    yigb/+l/vjDdAgMBAAE=
    -----END PUBLIC KEY-----
    

    要想解密flag,必须使用私钥。

    第1步,使用openssl从pubkey.pem中提取出e和modulus(即大素数)的值。

    rsa指令说明:

    root@kali:~# openssl rsa -help
    Usage: rsa [options]
    Valid options are:
     -help              Display this summary
     -inform format     Input format, one of DER PEM
     -outform format    Output format, one of DER PEM PVK
     -in val            Input file
     -out outfile       Output file
     -pubin             Expect a public key in input file //指定输入文件是公钥
     -pubout            Output a public key 
     -passout val       Output file pass phrase source
     -passin val        Input file pass phrase source
     -RSAPublicKey_in   Input is an RSAPublicKey
     -RSAPublicKey_out  Output is an RSAPublicKey
     -noout             Don't print key out
     -text              Print the key in text //以明文形式输出各个参数值
     -modulus           Print the RSA key modulus //输出模数值
     -check             Verify key consistency
     -*                 Any supported cipher
     -pvk-strong        Enable 'Strong' PVK encoding level (default)
     -pvk-weak          Enable 'Weak' PVK encoding level
     -pvk-none          Don't enforce PVK encoding
     -engine val        Use engine, possibly a hardware device

    命令:openssl rsa -pubin -text -modulus -in pubkey.pem

    第2步,进制转换,将modulus从16进制转换为十进制。

    在线进制转换工具:https://tool.lu/hexconvert/

    Modulus(十六进制)=C2636AE5C3D8E43FFB97AB09028F1AAC6C0BF6CD3D70EBCA281BFFE97FBE30DD

    Modulus(十进制)=87924348264132406875276140514499937145050893665602592992418171647042491658461

    第3步,大数分解找pq。
    在线大数分解工具:http://www.factordb.com/

    所以现在知道了

    p=275127860351348928173285174381581152299
    q=319576316814478949870590164193048041239
    e=65537

    第4步,使用rsatool工具生成私钥。

    安装:

    git clone https://github.com/ius/rsatool.git
    cd rsatool-master/  //进入这个目录
    python setup.py install

    如果安装出现问题,请参考:https://blog.csdn.net/jcbx_/article/details/97250664

    命令:python rsatool.py -o prikey.pem -e 65537 -p 275127860351348928173285174381581152299 -q 319576316814478949870590164193048041239

    第5步,使用私钥解密flag。

    命令:openssl rsautl -decrypt -in flag.enc -inkey prikey.pem

    参考:

    https://www.jianshu.com/p/830776f8a286

    https://www.cnblogs.com/gordon0918/p/5363466.html

     
  • 相关阅读:
    Java实现第十届蓝桥杯组队
    Java实现第十届蓝桥杯组队
    Java实现第十届蓝桥杯组队
    Java实现第十届蓝桥杯组队
    Java实现第十届蓝桥杯组队
    程序员加班奇遇
    Spring Boot导出jar包发布
    Eclipse工具栏太多,自定义工具栏,去掉调试
    ${pageContext.request.contextPath}的解释以及和request.contextPath的区别
    request 获取各种路径
  • 原文地址:https://www.cnblogs.com/zhengna/p/13497028.html
Copyright © 2011-2022 走看看