i春秋 Crypto模塊rsa wrtiteup


一、rsa256(100)

下載得到:

打開public.key:

1、使用openssl,分解publickey得到:

e=65537,n=D99E952296A6D960DFC2504ABA545B9442D60A7B9E930AFF451C78EC55D555EB

2、使用網站http://factordb.com/分解n,得到p,q

3、得到足夠的數據,利用python解密得到flag:

import gmpy2
import rsa
p = 302825536744096741518546212761194311477
q = 325045504186436346209877301320131277983
n = 98432079271513130981267919056149161631892822707167177858831841699521774310891
e = 65537
d = int(gmpy2.invert(e , (p-1) * (q-1)))
privatekey = rsa.PrivateKey(n , e , d , p , q)      #根據已知參數,計算私鑰
with open("encrypted.message1" , "rb") as f:
    print(rsa.decrypt(f.read(), privatekey).decode())       #使用私鑰對密文進行解密,並打印
with open("encrypted.message2" , "rb") as f:
    print(rsa.decrypt(f.read(), privatekey).decode())       #使用私鑰對密文進行解密,並打印
with open("encrypted.message3" , "rb") as f:
    print(rsa.decrypt(f.read(), privatekey).decode())       #使用私鑰對密文進行解密,並打印

二、medium RSA(200)

與上題類似,首先openssl分解pubkey.pem(利用python的rsa模塊自動生成的公私鑰文件一般保存為pem文件),得到e,n,然后分解n得到p,q,再利用python解密

上題是直接利用python的rsa模塊,該題應該直接利用rsa的解密方法,原因:上題數據較小,這題利用到了gmpy2

三、hard RSA(300)

分解pubkey.pem得到e和N,e=2

剛開始一直用常規rsa解題方法,求d的時候一直報錯:ZeroDivisionError: invert() no inverse exists,無法求逆(確實無法求,但不知道為什么)

然后百度得到e=2是一種特殊情況,應特殊對待:

import gmpy2
import rsa
import string
from Crypto.PublicKey import RSA

public_key = RSA.importKey(open("pubkey.pem").read())
N = public_key.n
e = public_key.e

p=275127860351348928173285174381581152299

q=319576316814478949870590164193048041239

with open('flag.enc', 'r') as f:
    cipher = f.read().encode('hex')
    cipher = string.atoi(cipher, base=16)
    print cipher

# 計算yp和yq
yp = gmpy2.invert(p,q)
yq = gmpy2.invert(q,p)

# 計算mp和mq
mp = pow(cipher, (p + 1) / 4, p)
mq = pow(cipher, (q + 1) / 4, q)

# 計算a,b,c,d
a = (yp * p * mq + yq * q * mp) % N
b = N - int(a)
c = (yp * p * mq - yq * q * mp) % N
d = N - int(c)

for i in (a,b,c,d):
    s = '%x' % i
    if len(s) % 2 != 0:
        s = '0' + s
    print s

很迷啊。。

 

參考鏈接:https://blog.csdn.net/huanghelouzi/article/details/82974741


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM