朋友們,現(xiàn)在只對常讀和星標(biāo)的公眾號才展示大圖推送,建議大家把長弓三皮“設(shè)為星標(biāo)”,否則可能就看不到了啦! 作者:隨波逐流 生活如夢,我愿隨風(fēng)起,隨波流,享受每一刻的自在與輕盈。 2024年第四屆 “網(wǎng)鼎杯” 網(wǎng)絡(luò)安全大賽青龍組初賽有一道密碼題目:Crypto-2,是一道AES加密題,本人數(shù)學(xué)不行,對于這種數(shù)學(xué)題目,我一向看到就頭痛,一般是見了就跳過的,不過,現(xiàn)在有了AI,解題就不那么難了。偷偷用AI解決一下。還是先讓AI給這篇文章取個標(biāo)題吧 再讓AI畫個封面 驚不驚喜,意不意外 言歸正傳
# coding: utf-8 #!/usr/bin/env python2
import gmpy2 import random import binascii from hashlib import sha256 from sympy import nextprime from Crypto.Cipher import AES from Crypto.Util.Padding import pad from Crypto.Util.number import long_to_bytes from FLAG import flag #flag = 'wdflag{123}'
def victory_encrypt(plaintext, key): key = key.upper() key_length = len(key) plaintext = plaintext.upper() ciphertext = ''
for i, char in enumerate(plaintext): if char.isalpha(): shift = ord(key[i % key_length]) - ord('A') encrypted_char = chr((ord(char) - ord('A') shift) % 26 ord('A')) ciphertext = encrypted_char else: ciphertext = char
return ciphertext
victory_key = 'WANGDINGCUP' victory_encrypted_flag = victory_encrypt(flag, victory_key)
p = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f a = 0 b = 7 xG = 0x79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798 yG = 0x483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8 G = (xG, yG) n = 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 h = 1 zero = (0,0)
dA = nextprime(random.randint(0, n))
if dA > n: print('warning!!')
def addition(t1, t2): if t1 == zero: return t2 if t2 == zero: return t2 (m1, n1) = t1 (m2, n2) = t2 if m1 == m2: if n1 == 0 or n1 != n2: return zero else: k = (3 * m1 * m1 a) % p * gmpy2.invert(2 * n1 , p) % p else: k = (n2 - n1 p) % p * gmpy2.invert((m2 - m1 p) % p, p) % p m3 = (k * k % p - m1 - m2 p * 2) % p n3 = (k * (m1 - m3) % p - n1 p) % p return (int(m3),int(n3))
def multiplication(x, k): ans = zero t = 1 while(t <= k): if (k &t )>0: ans = addition(ans, x) x = addition(x, x) t <<= 1 return ans
def getrs(z, k): (xp, yp) = P r = xp s = (z r * dA % n) % n * gmpy2.invert(k, n) % n return r,s
z1 = random.randint(0, p) z2 = random.randint(0, p) k = random.randint(0, n) P = multiplication(G, k) hA = multiplication(G, dA) r1, s1 = getrs(z1, k) r2, s2 = getrs(z2, k)
print('r1 = {}'.format(r1)) print('r2 = {}'.format(r2)) print('s1 = {}'.format(s1)) print('s2 = {}'.format(s2)) print('z1 = {}'.format(z1)) print('z2 = {}'.format(z2))
key = sha256(long_to_bytes(dA)).digest() cipher = AES.new(key, AES.MODE_CBC) iv = cipher.iv encrypted_flag = cipher.encrypt(pad(victory_encrypted_flag.encode(), AES.block_size)) encrypted_flag_hex = binascii.hexlify(iv encrypted_flag).decode('utf-8')
print('Encrypted flag (AES in CBC mode, hex):', encrypted_flag_hex)
# output # r1 = 80932673752923845218731053671144903633094494351596082125742241568755353762809 # r2 = 80932673752923845218731053671144903633094494351596082125742241568755353762809 # s1 = 11239004842544045364097722042148768449026688243093666008376082303522447245154 # s2 = 97301123368608673469588981075767011435222146576812290449372049839046298462487 # z1 = 84483328065344511722319723339101492661376118616972408250436525496870397932079 # z2 = 114907157406602520059145833917511615616817014350278499032611638874752053304591 # ('Encrypted flag (AES in CBC mode, hex):', u'd8851c55edec1114a6d7a4d6d5efbba4611a39216ec146d2e675194dd0d5f768bee1b09799a133ffda1d283c4f6db475834cbe52c38c88736c94795c137490be')
讓AI解題,需要寫一段提問語,如下: (題目給出的代碼內(nèi)容,此處省略) 上面是一道CTF比賽題目,求取flag的值,需要分幾步?請?zhí)峁┟恳徊叫枰膒ython代碼?;卮饐栴}和代碼注釋均使用中文。 chatgpt(免費(fèi)版)的回答如下: 加上已知參數(shù),運(yùn)行給出的代碼結(jié)果 答案出來了,哇塞,簡直絕絕子! 完整代碼可見: 寶子們,是不是又解鎖了一種作弊新技能,希望出題老師不要打我 ------------------------------------------------------------------- 再來測試一下國內(nèi)的AI 一、豆包 顏色看著就比較舒服,運(yùn)行一下 只出了一部分flag,估計是沒有考慮到填充,提示給它,給我回了一個完整代碼
超級給力啊,此處應(yīng)有掌聲 二、百度文心一言3.5 (文心一言沒有分步,一次給出全部代碼 ,代碼太長,只截取一部分) 說了一堆原理,給出的代碼一看就不正確,看藍(lán)色部分,它還假設(shè)了一個不存在的hypothetical_aes_key,很明顯抄網(wǎng)上現(xiàn)成的代碼。初略看了下,基本無法用,將代碼放到PyCharm中,運(yùn)行一下,果然報了一堆錯誤,放棄。 三、Kimi 省略。。。。 不知道為什么給出的是python2代碼,看著還可以,運(yùn)行一下報錯,繼續(xù)提交報錯信息修改,修改了3次能正常運(yùn)行了,但仍然無法得出正確答案,放棄 四、智譜清言GLM-4 運(yùn)行后報錯,提交錯誤信息3次,仍然無法運(yùn)行,放棄 五、360智腦 360宣傳說是集合多家AI,上面好像查詢了6個,但給出的代碼看著就好像不對,先運(yùn)行一下再說吧。居然沒有復(fù)制按鈕,差評。 運(yùn)行代碼都沒有導(dǎo)入庫,暈死大部分庫都沒有導(dǎo)入,手動加入,運(yùn)行報錯,提交報錯信息給360 提交了3次,居然出現(xiàn)這個,我也是醉了 六、訊飛星火 訊飛分步給了代碼 ,最后還給出完整代碼(太長就不截圖了),這點(diǎn)很贊 但運(yùn)行報錯,提交錯誤信息修改3次后仍然報錯,放棄 還要發(fā)吐槽一點(diǎn),提交錯誤信息后,回復(fù)信息居然是英文 七、通義千問2.5 不得不說,通義的代碼看著是最舒服的,所有庫導(dǎo)入正確,顏色分類顯示,代碼十分規(guī)范??上峤粓箦e信息幾次后,仍然不能得出正確答案,放棄。 |
|