2018.04.21-安恒杯线上赛 RSA writeup

1.pub.key 打开之后就是这样的

-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+
/AvKr1rzQczdAgMBAAE=
-----END PUBLIC KEY-----

2.首先将两个文件复制到Openssl.exe所在文件目录下,然后打开软件

2018.04.21-安恒杯线上赛 RSA writeup_第1张图片

openssl分析私钥,执行rsa -pubin -text -modulus -in pub.key 命令exponent就是e值,modulus是n模数的值。


2018.04.21-安恒杯线上赛 RSA writeup_第2张图片

Exponent: 65537 (0x10001)
Modulus=C0332C5C64AE47182F6C1C876D42336910545A58F7EEFEFC0BCAAF5AF341CCDD
writing RSA key
-----BEGIN PUBLIC KEY-----
MDwwDQYJKoZIhvcNAQEBBQADKwAwKAIhAMAzLFxkrkcYL2wch21CM2kQVFpY9+7+
/AvKr1rzQczdAgMBAAE=

-----END PUBLIC KEY-----


3.然后使用msieve进行分解n值

msieve下载地址:https://sourceforge.net/projects/msieve/


>msieve153.exe 0xC0332C5C64AE47182F6C1C876D42336910545A58F7EEFEFC0BCAAF5AF341CCDD -v

记得在前面加上 0x  后面是-v

分解之后的结果如下:

2018.04.21-安恒杯线上赛 RSA writeup_第3张图片

p39 factor: 285960468890451637935629440372639283459
p39 factor: 304008741604601924494328155975272418463

此时既知:p和q的值

p39 factor: 285960468890451637935629440372639283459   //p

p39 factor: 304008741604601924494328155975272418463   //q




4.然后在unbantu中运行以下代码:

    #!/usr/bin/python  

    # coding=utf-8  

    #代码转自实验吧

    #通过脚本,根据p,q,e值,生成私钥,貌似该脚本只能在Linux或者cygwin的python下运行。  
    #我就在windows试试不行,装不了能力有限,试过pip install pycrypto  
    #果断用Linux吧  
    import math  
    import sys  
    from Crypto.PublicKey import RSA  
    keypair=RSA.generate(1024)  
    keypair.p=285960468890451637935629440372639283459
    keypair.q=304008741604601924494328155975272418463  
    keypair.e=65537  //这个值不要忘记了,不一样的
    keypair.n=keypair.p*keypair.q  
    Qn=long((keypair.p-1)*(keypair.q-1))  
      
    i=1  
    while(True):  
        x=(Qn*i)+1  
        if(x%keypair.e==0):  
            keypair.d=x/keypair.e  
            break  
        i+=1  
    private=open('private.pem','w')  
    private.write(keypair.exportKey())  
    private.close() 



结束之后就可以得到一个private.pem的文件

2018.04.21-安恒杯线上赛 RSA writeup_第4张图片

5.使用密钥进行解密

还是在openssl中进行操作:

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



flag{decrypt_256}


你可能感兴趣的:(ctf)