RSA 含兩道oj 上ctf題目

  藍橋杯一個填空題是rsa,python也沒跑出來,回來又學了學rsahtml

這個講的很清楚,證實啥的都很清晰,(證實中,m與n不互質時,ed兩次帶入,彷佛不必。)python

連接:https://blog.csdn.net/u014044812/article/details/80866759加密

 

其中附加的展轉相除法,手算ax+by=1這種式子也會了。spa

舉個百度的例子:.net

已知不定方程爲
   
,利用展轉相除法求出一組整數解
 
解:求
   
的算式爲:
因此
因此
 
因此
   
是不定方程
   
的一組解。
 
藍橋杯中的題意是已知n,d,c求m,e是未知。
 
加密:
m^ec(modn)
解密:
c^d≡m(modn)
 
好像用公式一套就出來了??!
 
 
反正oj上第一個flag是獲得了
import rsa,sys from rsa import common #(pub_key,pri_key) = rsa.newkeys(256) #m = b'hello' #crpto = rsa.encrypt(m,pub_key) #print(len(crpto),common.byte_size(pub_key.n)) #print(pri_key) #print(sys.argv[0])
pri_k = open('rsa_private_key.pem','r').read() #print(pri_k,'1') #print("--------------------------------------------------")
pri_key = rsa.PrivateKey.load_pkcs1(pri_k) #print(pri_key)
c = open('flag.encrypt','rb').read() m = rsa.decrypt(c,pri_key) print(m)

 第二個:3d

找到了一個知乎的解法,而後n,e,d,p,q都同樣,解密失敗。。。code

我就是解密失敗。。無語orm

而後找到了一個博客上面是本身實現解密方法,而後調用。htm

我又試了試,本身寫了個。blog

由於rsa解密在獲得了私鑰後,其實就是帶mod的快速冪

而後解成功了,可是解碼顯示沒出來,python3  str沒有decode方法。

因而想到了以前bytes2int()會不會有反向的,由於bytes有decode

而後發現真有,就很愉悅了。

轉爲bytes後decode就出來了。

至於如何獲得的n,e,p,q,d參考我以前寫的隨筆:https://www.cnblogs.com/zhibin123/p/10590743.html

# -*- coding:utf-8 -*-
import gmpy2 import rsa from rsa import transform,core def fastMod(c,d,n): t = c res = 1
    while d: if d & 1: res = (res * t)%n t = ( t * t ) % n d>>=1
    return res def decrytption(c,d,n): return fastMod(c,d,n) q = 319576316814478949870590164193048041239 p = 275127860351348928173285174381581152299 n = 87924348264132406875276140514499937145050893665602592992418171647042491658461 e = 65537 d = int(gmpy2.invert(e,(p-1) * (q-1))) pri_key = rsa.PrivateKey(n,e,d,p,q) c = open('flag.encrypt','rb').read() print(c) c = transform.bytes2int(c) print(c) m = decrytption(c,d,n) print(m,type(m)) flag = transform.int2bytes(m).decode() print(flag)
相關文章
相關標籤/搜索