引言
昨天使用到 strings
與 grep
這兩個工具,
主要是用來尋找一堆資料中的字串的。
今天的題目會是與編碼有關的,算是密碼學領域的小小入門。
我們就直接開始吧!
General Skills / Bases:
這題給了一串文字:bDNhcm5fdGgzX3IwcDM1
題目標題是 bases ,可以猜到這應該是 base64 編碼,
可以看看維基百科的說明: base64
簡單來說 base64 是一串編碼,
用來將一串二進制資料轉成「可視字元」,
諸如網址、圖片等都能用 base64 轉換成一串編碼。
可以用 Python 中的 base64 套件來編碼與解碼,
此題要解碼,所以我們會用到其中的 b64decode() 函式,
解碼出來會是 bytes
型態,直接列印出來會是 b'xxx'
形式,
需要再調用 .decode() 方法轉成 str
型態:
import base64
b = base64.b64decode('bDNhcm5fdGgzX3IwcDM1')
print(b.decode())
base64 的轉換都是先將資料轉成 bytes 型態,
解碼時也要先轉回 b'xxx'
這樣子的 bytes 型態,
再藉由 .decode() 方法轉回字串。
結果:
$ python bases.py
l3arn_th3_r0p35
用 flag 格式包起來:
picoCTF{l3arn_th3_r0p35}
可以 decode 當然也可以 encode ,也就是編碼,
我們試著將 apple
編碼看看:
import base64
b = base64.b64encode('apple'.encode())
print(b.decode())
這邊要注意,需要編碼的字串必須先用 .encode() 方法轉成 bytes 型態,
上面解碼的部份則是要轉不轉都行,編碼是一定要先轉成 bytes 型態。
例如上面的部份也可以寫成:
b = base64.b64decode('bDNhcm5fdGgzX3IwcDM1'.encode())
但可以不用, b64decode 是可以接受 bytes 或 str 型態的。
而 b64encode 則一定要 bytes 型態,需注意。
執行後得到:
YXBwbGU=
我們將它解碼回來:
import base64
b = base64.b64decode('YXBwbGU='.encode())
print(b.decode())
執行後得到:
apple
的確是原來的資料。