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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

BUUCTF Crypto

發(fā)布時(shí)間:2023/12/13 综合教程 37 生活家
生活随笔 收集整理的這篇文章主要介紹了 BUUCTF Crypto 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

BUUCTF 幾道crypto WP

[AFCTF2018]Morse

簡(jiǎn)單的莫爾斯密碼,最直觀的莫爾斯密碼是直接采用空格分割的點(diǎn)和劃線,這題稍微繞了一下使用的是斜杠來(lái)劃分
所以首先將斜杠全部替換為空格,然后在在線解密莫爾斯密碼,得到一串16進(jìn)制最后在16進(jìn)制轉(zhuǎn)字符串即可

[GUET-CTF2019]BabyRSA

給出以下條件

這里直接給出歐拉函數(shù),以及p+q的結(jié)果,我們知道要想求解m=pow(c,d,n),而這里d的問(wèn)題已經(jīng)是直接給出的,
所以剩下就是n的求解,n這里只要把歐拉函數(shù)展開(kāi)在和p+q進(jìn)行運(yùn)算即可得到
(p+1)(q+1)=pq+(p+q)+1 => n=pq=(p-1)(q-1)-(p+q)-1
所以最終exp如下:

# -*- coding:utf-8 -*-
# Author : Konmu
# k=p+q
# phi=(p+1)(q+1)

from Crypto.Util.number import long_to_bytes

k=int('0x1232fecb92adead91613e7d9ae5e36fe6bb765317d6ed38ad890b4073539a6231a6620584cea5730b5af83a3e80cf30141282c97be4400e33307573af6b25e2ea',16)
phi=int('0x5248becef1d925d45705a7302700d6a0ffe5877fddf9451a9c1181c4d82365806085fd86fbaab08b6fc66a967b2566d743c626547203b34ea3fdb1bc06dd3bb765fd8b919e3bd2cb15bc175c9498f9d9a0e216c2dde64d81255fa4c05a1ee619fc1fc505285a239e7bc655ec6605d9693078b800ee80931a7a0c84f33c851740',16)
e=int('0xe6b1bee47bd63f615c7d0a43c529d219',16)
d=int('0x2dde7fbaed477f6d62838d55b0d0964868cf6efb2c282a5f13e6008ce7317a24cb57aec49ef0d738919f47cdcd9677cd52ac2293ec5938aa198f962678b5cd0da344453f521a69b2ac03647cdd8339f4e38cec452d54e60698833d67f9315c02ddaa4c79ebaa902c605d7bda32ce970541b2d9a17d62b52df813b2fb0c5ab1a5',16)
c=int('0x50ae00623211ba6089ddfae21e204ab616f6c9d294e913550af3d66e85d0c0693ed53ed55c46d8cca1d7c2ad44839030df26b70f22a8567171a759b76fe5f07b3c5a6ec89117ed0a36c0950956b9cde880c575737f779143f921d745ac3bb0e379c05d9a3cc6bf0bea8aa91e4d5e752c7eb46b2e023edbc07d24a7c460a34a9a',16)

n=phi-k-1
m=pow(c,d,n)
print(long_to_bytes(m))

[NCTF2019]Keyboard

這題說(shuō)實(shí)話,算作密碼的題目有點(diǎn)牽強(qiáng)感覺(jué),腦洞有點(diǎn)多,感覺(jué)更加偏向misc的類(lèi)型
首先密文中給出的字母觀察之后發(fā)現(xiàn)全是鍵盤(pán)字母鍵的第一行(從上向下看),并且每一個(gè)都按序?qū)?yīng)了數(shù)字鍵
q->1,w->2,e->3,r->4...
其次發(fā)現(xiàn)密文中字母重復(fù)的次數(shù)全是在1-4次,故而猜測(cè)是手機(jī)九宮格密碼

接下來(lái)的解決方法兩種,一種是手動(dòng)寫(xiě),一種是編寫(xiě)腳本
我寫(xiě)的exp如下:

# -*- coding:utf-8 -*-
# Author : Konmu
# [NCTF2019]Keyboard

chiper='ooo yyy ii w uuu ee uuuu yyy uuuu y w uuu i i rr w i i rr rrr uuuu rrr uuuu t ii uuuu i w u rrr ee www ee yyy eee www w tt ee'
chiper=chiper.split(' ')

keys=['q','w','e','r','t','y','u','i','o']
values=[1,2,3,4,5,6,7,8,9]
dicts=dict(zip(keys,values))

jiugongge=['   ','abc','def','ghi','jkl','mno','pqrs','tuv','wxyz']
new_dicts=dict(zip(values,jiugongge))

for i in range(len(chiper)):
    temp=dicts.get(chiper[i][0])
    print(''.join(new_dicts[temp][len(chiper[i])-1]),end='')

[HDCTF2019]bbbbbbrsa

這題有個(gè)坑的地方就是,一開(kāi)始沒(méi)注意他導(dǎo)入庫(kù)的時(shí)候把b64encode重命名成了b32encode,剩下來(lái)要解決的問(wèn)題就是e的求解
這里這題是取得50000-70000之間的隨機(jī)與phi互素的數(shù),解決方法也很簡(jiǎn)單,直接在這個(gè)范圍內(nèi)爆破就行了
第二個(gè)坑點(diǎn)就是,由于不是直接參賽時(shí)做題,所以對(duì)于flag的格式并不了解,只好一個(gè)個(gè)嘗試
(這里你可能會(huì)想BUUCTF平臺(tái)不是告訴你格式了嗎?答:由于好多題的最終答案都是改了格式的,所以到底是不是flag{}包裹的,真不好確定???)
exp示例:

# -*- coding:utf-8 -*-
# Author: Konmu

from base64 import b64decode
import gmpy2
from Crypto.Util.number import long_to_bytes

p=177077389675257695042507998165006460849
q=211330365658290458913359957704294614589
n=37421829509887796274897162249367329400988647145613325367337968063341372726061
c='==gMzYDNzIjMxUTNyIzNzIjMyYTM4MDM0gTMwEjNzgTM2UTN4cjNwIjN2QzM5ADMwIDNyMTO4UzM2cTM5kDN2MTOyUTO5YDM0czM3MjM'
c=int(b64decode(c[::-1]))
phi=(p-1)*(q-1)

for e in range(50000,70000):
    if(gmpy2.gcd(e,phi)==1):
        d=int(gmpy2.invert(e,phi))
        m=pow(c,d,n)
        if 'flag{' in long_to_bytes(m):
            print(long_to_bytes(m))

雞藕椒鹽味

這題諧音提示奇偶校驗(yàn)位,但實(shí)際感覺(jué)應(yīng)該不是奇偶校驗(yàn)碼,準(zhǔn)確來(lái)說(shuō)應(yīng)該是個(gè)漢明碼的奇偶校驗(yàn)分組碼
當(dāng)監(jiān)督位為:0000,接收方生成的校驗(yàn)位和收到的校驗(yàn)位相同,否則不同說(shuō)明出錯(cuò),所以這題就變成了解決漢明碼的校驗(yàn)糾錯(cuò)問(wèn)題
漢明碼糾錯(cuò)分為以下幾步,首先根據(jù)公式:(2^rgeq k+r+1)(k表示數(shù)據(jù)位數(shù),r表示校驗(yàn)位數(shù),r要是最小的符合不等式的值)
根據(jù)給出的漢明碼1100 1010 0000共十二位,說(shuō)明k+r=12,則大于13的最小r應(yīng)為4,故k數(shù)據(jù)位為8
確定共4位校驗(yàn)位,且校驗(yàn)位的排放位置只能在(2^n)的位置上,所以確定漢明碼中的(P_1,P_2,P_4,P_8)這幾個(gè)位置是校驗(yàn)位
那么將其剔出后的即為數(shù)據(jù)k(1100 0100)
又題中說(shuō)順序倒了一下,說(shuō)明正確的數(shù)據(jù)應(yīng)該是0000 0010 0011,則剔出后有效數(shù)據(jù)為0010 0011
到這里已經(jīng)得到了正確的數(shù)據(jù),所以剩下就是求出校驗(yàn)位指出的錯(cuò)誤位

注:(P_1,P_2,P_4,P_8)的數(shù)據(jù)填寫(xiě)其二進(jìn)制的首位,得到發(fā)送方校驗(yàn)碼:1000
計(jì)算(P_1,P_2,P_4,P_8)
(P_4=D_5igoplus D_6igoplus D_7igoplus D_8=0igoplus 0igoplus 1igoplus 1=0)
(P_3=D_2igoplus D_3igoplus D_4igoplus D_8=0igoplus 1igoplus 0igoplus 1=0)
(P_2=D_1igoplus D_3igoplus D_4igoplus D_6igoplus D_7=0igoplus 1igoplus 0igoplus 0igoplus 1=0)
(P_1=D_1igoplus D_2igoplus D_4igoplus D_5igoplus D_7=0igoplus 0igoplus 0igoplus 0igoplus 1=1)
注:以上計(jì)算說(shuō)明:以(P_4)為例,其檢驗(yàn)位檢驗(yàn)的是所有二進(jìn)制(從左到右)第1位為一的數(shù)據(jù),即(D_5,D_6,D_7,D_8)
由檢驗(yàn)結(jié)果可得接收方校驗(yàn)碼:0001
接收和發(fā)送校驗(yàn)碼不一致,說(shuō)明有錯(cuò),將其取反即可
最終數(shù)據(jù)是:1101 1010 0000,將其用python md5算一下即可

[HDCTF2019]basic rsa

最基本的RSA
exp示例:

# -*- coding:utf-8 -*-
# Author: Konmu
# [HDCTF2019]basic rsa
import gmpy2
from Crypto.Util.number import *

p=262248800182277040650192055439906580479
q=262854994239322828547925595487519915551
e=65533
n=p*q
c=27565231154623519221597938803435789010285480123476977081867877272451638645710
phi=(p-1)*(q-1)

d=int(gmpy2.invert(e,phi))
m=pow(c,d,n)

print(long_to_bytes(m))

浪里淘沙

看到密文全是一些單詞的重復(fù),所以想到詞頻統(tǒng)計(jì),首先獲取每個(gè)單詞出現(xiàn)的頻率,然后按序排列,最后將排在4,8,11,15,16的單詞進(jìn)行拼接即可
exp:

# -*- coding:utf-8 -*-
# Author: Konmu

f=open("C:/Users/xxx/Desktop/浪里淘沙.txt",'r')
data=f.read()

statistics={}
frequency=[]
num=[4,8,11,15,16]
def zipin(lsit):
    for i in lsit:
        statistics.setdefault(data.count(i),str(i))
        frequency.append(data.count(i))
    frequency.sort()
    for i in num:
        print(''.join(statistics.get(frequency[i-1])),end='')
    print('
')
    return(statistics)

if __name__ == '__main__':
    letters=["tonight","success","notice","example","should","crypto","backspace","learn","found","morning","we","system","sublim","the","user","enter"]
    print(zipin(letters))

總結(jié)

以上是生活随笔為你收集整理的BUUCTF Crypto的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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