日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[羊城杯 2020]GMC

發(fā)布時間:2025/3/21 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [羊城杯 2020]GMC 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

[羊城杯 2020]GMC

題目

from Crypto.Util.number import getPrime,bytes_to_long,getRandomNBitInteger from secret import flag from gmpy2 import gcddef gmc(a, p):if pow(a, (p-1)//2, p) == 1:return 1else:return -1def gen_key():[gp,gq] = [getPrime(512) for i in range(2)]gN = gp * gqreturn gN, gq, gpdef gen_x(gq,gp):while True:x = getRandomNBitInteger(512)if gmc(x,gp) ^ gmc(x,gq) == -2:return xdef gen_y(gN):gy_list = []while len(gy_list) != F_LEN:ty = getRandomNBitInteger(768)if gcd(ty,gN) == 1:gy_list.append(ty)return gy_listif __name__ == '__main__':flag = bin(bytes_to_long(flag))[2:]F_LEN = len(flag)N, q, p = gen_key()x = gen_x(q, p)y_list = gen_y(N)ciphertext = []for i in range(F_LEN):tc = pow(y_list[i],2) * pow(x,int(flag[i])) % Nciphertext.append(tc)with open('./output.txt','w') as f:f.write(str(N) + '\n')for i in range(F_LEN):f.write(str(ciphertext[i]) + '\n')

解題

程序如何加密的還是挺容易看出來的,關(guān)鍵就是怎么逆過去了。。。

from Crypto.Util.number import * def isqr(x,p):if p==1 or x==1:return 1sgn=1while x%2==0:x=x//2if p%8==3 or p%8==5:sgn=-sgnif x<p:_tmp=pp=xx=_tmpif x%4==3 and p%4==3 :sgn=-sgnreturn sgn*isqr(x%p,p) n,s=0,[] fp=open("output.txt","r") n=int(fp.readline()) while True:try:a=int(fp.readline())s.append(a)except:break assert len(s)+1==304 ans="" for i in s:if(isqr(i,n)==1):ans+='0'else:ans+='1' print(long_to_bytes(int(ans,2)))

參考代碼

運行得到:b'GWHT{876db950c1424a8e49d50cdcc0b3a86e}'

答案

flag{876db950c1424a8e49d50cdcc0b3a86e}

總結(jié)

以上是生活随笔為你收集整理的[羊城杯 2020]GMC的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。