攻防世界密碼學streamgame2

2021-10-18 03:16:39 字數 2163 閱讀 5059

看題目:

題目給了乙個壓縮包,有乙個.py檔案和乙個key檔案。

.py:

from flag import flag

assert flag.startswith(

"flag"

)assert

len(flag)

==27

deflfsr

(r,mask)

: output =

(r <<1)

&0xffffff

i=(r&mask)

&0xffffff

lastbit=

0while i!=0:

lastbit^

=(i&1)

i=i>>

1 output^

=lastbit

return

(output,lastbit)

r=int

(flag[5:

-1],

2)mask=

0x100002

f=open

("key"

,"ab"

)for i in

range(12

):tmp=

0for j in

range(8

):(r,out)

=lfsr(r,mask)

tmp=

(tmp <<1)

^out

f.write(

chr(tmp)

)f.close(

)

看起來好像不怎麼難。

key檔案,老樣子,拖入16進製制編輯器檢視:

分析**:

先是讀入flag,去掉flag和大括號之後再經過一系列的轉化再存入key檔案。

這裡有乙個關鍵的地方,r = int(flag[5:-1],2),這句話不報錯的唯一前提就是flag是由1和0構成的二進位制數,這瞬間就簡單了,其中mask的大小大概在2的21次方左右,所以flag的範圍也是差不多。其中lfst函式很難理解,所以我選擇直接爆破,這樣子很快可以做出來。

爆破指令碼:

def

lfsr

(r,mask)

: output =

(r <<1)

&0xffffff

i=(r&mask)

&0xffffff

lastbit=

0while i!=0:

lastbit^

=(i&1)

i=i>>

1 output^

=lastbit

return

(output,lastbit)

flags=

[178

,233,14

,19,160

,106,27

,252,64

,230

,125,83

]r=0mask=

0x100002x=0

while1:

rs=r

for i in

range(12

):tmp=

0for j in

range(8

):(rs,out)

=lfsr(rs,mask)

tmp=

(tmp <<1)

^out

if tmp!=flags[i]

: x=

0 r+=

1break

;if x:

print

(bin

(r))

breakx=1

跑了3分鐘大概就出來了:

包上flag{}提交即可。

第一次做出來這種題型,以前總覺得很難做不出來,現在發現也不是那麼的難,還是可以做一做的。

密碼學 密碼學基礎

密碼學是研究編制密碼和破譯密碼的技術科學。密碼學的安全目標至少包含三個方面 保密性 完整性 可用性。完整性 資源只有授權方以授權的方式進行修改,所有資源沒有授權則不能修改。可用性 資源只有在適當的時候被授權方訪問,並按需求使用。密碼系統由5部分組成 1 明文空間m 全體明文的集合 2 密文空間c 全...

密碼學 柵欄密碼

使用的時候通過設定解密的偏移量不一樣的話,會得出不同的解碼內容 一直設定不同的偏移位數 直到找到帶有cyberpeace 開頭的解碼內容 偏移量也就是分組的數字長度 一般就是flag了 有時候它也會全部的解碼都沒有flag的標誌,這時候一定仔細看題目給出的條件 還有的情況就是在題目裡面它會提示給你數...

密碼學 密碼學中幾種攻擊模式

本科畢業設計做完之後,一直覺得自己需要系統來學習一下密碼學,密碼學是乙個古老的學科,前人已經研究了太多太多,而伴隨著量子計算的逐漸發展,之前制定出來的密碼演算法都面臨著被淘汰的危險。今天記錄一下根據密碼分析者知道資訊的多少,密碼學中分為常見的幾種攻擊模式,以及它們主要用於什麼場合。在介紹攻擊模式之前...