zoukankan      html  css  js  c++  java
  • BUUCTF-RE-rsa

    一、

    打开文件。可以看到下面两个文件,结合题目rsa。可知,pub.key里是rsa的公钥,flag.enc里面的是密文。

    RSA加密解密的内容大概如下


    公钥n = p * q,其中p和q是两个大素数

    e是随机选择的数,作为公钥

    d是跟e有关的一个数,满足条件式:ed=1(mod phi(n))

    phi(n)是欧拉函数,phi(n)=(p-1)(q-1)

    加密过程:设明文为m,密文为c

    c = m^e(mod n)

    解密过程:

    m=c^d (mod n)

    RSA密钥体制中,n和e作为公钥,是都可以得到的值;d作为私钥,是私人拥有的

    要破解RSA,最常用的方法是大素数分解,即:找到p和q,使得n=p*q成立

             

    解密的过程就是求  n  e  d

    参考:带你彻底理解RSA算法

               RSA攻击

    二、

    有公钥之后我们第一步要做的就是,解析公钥  可以通过在线工具解析

     通过n算p、q

    可以使用在线工具算素数factordb.com

    p = 285960468890451637935629440372639283459
    
    q = 304008741604601924494328155975272418463

    写脚本前需要解决的问题

    【windows下配置Python第三方库我一般在命令行使用easy_install.命令

         例如下载rsa,只需要在命令行下输入命令:easy_install rsa即可。】

    参考VSCode 自动导入包插件 Auto Import安装gmpy2RSA-tool

    脚本如下

    import gmpy2
    import rsa
    
    e=65537
    n=86934482296048119190666062003494800588905656017203025617216654058378322103517
    p = 285960468890451637935629440372639283459
    q = 304008741604601924494328155975272418463
    
    phin=(q-1)*(p-1)
    d=gmpy2.invert(e,phin)
    
    key=rsa.PrivateKey(n,e,int(d),p,q)
    
    with open("D:\BaiduNetdiskDownload\BUUCTF\ras\output\flag.enc","rb+") as f:
        f=f.read()
    flag=rsa.decrypt(f,key)
    print(flag)

    rsa解题脚本参考:https://blog.csdn.net/huanghelouzi/article/details/82974741

    三、flag

    flag{decrypt_256}

  • 相关阅读:
    forEach与迭代器
    JavaMap
    java stack
    Java的Iterator迭代器
    JavaScript基础知识汇总
    Http协议总结
    以太坊交易剔重规则
    localhost与127.0.0.1与0.0.0.0
    boost之asio
    调和级数求和
  • 原文地址:https://www.cnblogs.com/Nickyl07/p/12670317.html
Copyright © 2011-2022 走看看