iT邦幫忙

2025 iThome 鐵人賽

DAY 24
0
Security

從0基礎開始起飛,一起一步步踏入資安系列 第 24

[ Day 24 ] 善用Linux工具解碼 ( 古典 / 現代密碼學 )

  • 分享至 

  • xImage
  •  

學習密碼學,不只是理解公式,更重要的是 動手實驗。在 Linux 環境下,我們可以利用許多現成工具來加密、解密,這對 CTF 實戰或學習密碼學都有幫助。

以下會依序介紹

古典密碼學 ( Classical Ciphers )

凱撒密碼 (Caesar Cipher)

原理:將字母依照固定位移 (shift) 來替換,例如位移 3:

  • A → D
  • B → E
  • C → F

Linux 指令 ( tr ):

# 把字母往後移 3 個
echo "HELLO" | tr 'A-Z' 'D-ZA-C'

輸出:

KHOOR

解密時,只要位移回去:

echo "KHOOR" | tr 'D-ZA-C' 'A-Z'

輸出:

HELLO

Atbash 密碼

原理:A ↔ Z,B ↔ Y,C ↔ X … 也就是字母對調。

Linux 指令 ( tr ):

echo "HELLO" | tr 'A-Z' 'Z-A'

輸出:

SVOOL
  • 再跑一次就能還原。

替換式密碼 ( monoalphabetic cipher )

原理:自己定義一個替換表,例如 A → Q,B → W …。

Linux 指令 ( tr ):

# 定義替換表 (A→Q, B→W, C→E ...)
echo "HELLO" | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'QWERTYUIOPASDFGHJKLZXCVBNM'

輸出:

ITSSG

維吉尼亞密碼 (Vigenère Cipher)

這種加密方式比較複雜,無法只靠 tr,但可以用 Python one-liner

echo "KHOOR" | python3 -c "import sys;from itertools import cycle;key='KEY';ct=sys.stdin.read().strip();print(''.join(chr(((ord(c)-65)-(ord(k)-65))%26+65)for c,k in zip(ct,cycle(key))))"
  • 這樣就能用 Python 搭配 Linux pipeline 解密。
  • 線上工具會快很多

現代密碼學 (Modern Cryptography)

現代密碼學講究強度和演算法,Linux 上常用的工具是 OpenSSLGPG

Base64 編碼/解碼

雖然不是加密,但在 CTF 常見。

編碼 :

# 編碼
echo "hello" | base64

輸出:

aGVsbG8=

解碼 :

# 解碼
echo "aGVsbG8=" | base64 -d

輸出:

hello

AES 加密與解密 (OpenSSL)

加密:

echo "mysecret" | openssl enc -aes-256-cbc -a -salt -pass pass:password123

輸出 (範例,會隨機):

U2FsdGVkX1+aL5fj...

解密:

echo "U2FsdGVkX1+aL5fj..." | openssl enc -aes-256-cbc -a -d -pass pass:password123

輸出:

mysecret

RSA 加解密

產生金鑰:

openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -pubout -out public.pem

加密:

echo "flag{secret}" | openssl rsautl -encrypt -pubin -inkey public.pem | base64

解密:

echo "..." | base64 -d | openssl rsautl -decrypt -inkey private.pem

GPG (檔案加密工具)

# 加密
gpg -c secret.txt

# 解密
gpg secret.txt.gpg

上一篇
[ Day 23 ] 現代密碼學 - 對稱/非對稱加密、 雜湊函數、數位簽章
下一篇
[ Day 25 ] 封包? pcap檔
系列文
從0基礎開始起飛,一起一步步踏入資安25
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言