iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
Security

一起資安入門 -- picoCTF 探索與解題系列 第 15

[2021鐵人賽 Day15] General Skills 12

  • 分享至 

  • xImage
  •  
  • 引言
    昨天使用到 stringsgrep 這兩個工具,
    主要是用來尋找一堆資料中的字串的。

    今天的題目會是與編碼有關的,算是密碼學領域的小小入門。
    我們就直接開始吧!

  • General Skills / Bases:
    https://ithelp.ithome.com.tw/upload/images/20210930/20111429L4PuTUe1Id.png
    這題給了一串文字:
    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
    

    的確是原來的資料。


上一篇
[2021鐵人賽 Day14] General Skills 11
下一篇
[2021鐵人賽 Day16] General Skills 13
系列文
一起資安入門 -- picoCTF 探索與解題30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言