【Python實作】簡易解碼器|位移加密法與ASCII 碼的認識

這篇用 Python 實作一個簡易解碼器,練習字串與整數的轉換,並認識 ord()chr() 這兩個常用函數。

📘 Python 實作|簡易解碼器

練習目的

這次的實作目標,是透過一個簡單的位移解密範例,加強 Python 資料型別與字串處理的觀念。

  • 練習字串與整數之間的轉換。
  • 認識 ord() 函數。
  • 認識 chr() 函數。
  • 練習使用 for 迴圈逐字處理字串。
  • 理解簡單的位移加密與解密概念。

🔐 位移加密法是什麼?

在密碼學中,有一種非常基本的加密方式,叫做「位移加密法」。

它的做法是:把明文字串中的每一個字元,轉成對應的 ASCII 數字,再加上一個整數 K,得到加密後的字元。

加密:字元的 ASCII 碼 + K
解密:字元的 ASCII 碼 - K

例如當 K = 2 時,字串 banana 的每個字元都往後移兩碼,就會變成:

banana → dcpcpc

解密時則相反,只要把密文字串中的每個字元都減去同一個 K,就可以還原成原本的明文。

這篇示範的是非常基礎的位移概念,重點是練習 Python 字串處理。真正的密碼學會更複雜,這裡先不用緊張,我們先讓字元乖乖排隊就好。

🧪 完整程式碼

下面是一個簡單的 Python 解碼器。使用者輸入密文字串後,程式會將每個字元往回位移 2 碼。

# 程式開始 code = input("請輸入密文字串:") k = 2 plain = "" for c in code: plain += chr(ord(c) - k) print("解密結果:", plain) # 程式結束

🖥️ 程式執行結果

假設輸入的密文字串是 dcpcpc,執行結果會像這樣:

請輸入密文字串:dcpcpc
解密結果: banana

🔎 程式說明

這段程式的核心在下面這兩行:

for c in code: plain += chr(ord(c) - k)

它會逐一取出密文字串中的每個字元,轉成 ASCII 數字後減掉位移值,再轉回字元,最後接到解密結果裡。

1. ord(c):把字元變成 ASCII 數字

ord() 的功能,是把一個字元轉成對應的 Unicode 編碼數字。

在這個英文小寫字母的例子中,可以先簡單理解成把字元轉成 ASCII 數字。

ord("a") → 97 ord("d") → 100 ord("c") → 99

所以假設目前處理到的字元是 c,那麼:

ord("c") → 99

2. ord(c) - k:把 ASCII 數字往回移

解密時,要把加密時位移的數字扣回來。

如果 k = 2,而目前字元是 "c"

ord("c") = 99 99 - 2 = 97

97 正好是 "a" 的編碼。

3. chr(ord(c) - k):把數字變回字元

chr() 的功能,剛好和 ord() 相反。

它會把數字轉回對應的字元。

chr(97) → "a"

所以:

chr(ord("c") - 2) = chr(99 - 2) = chr(97) = "a"

4. plain += ...:把解密後的字元接起來

一開始我們先建立一個空字串:

plain = ""

接著每解出一個字元,就把它接到 plain 後面。

plain += chr(ord(c) - k)

這就像把一個個解密後的字元慢慢累積起來,最後形成完整的明文。

🧩 全部串起來的邏輯

假設目前處理的字元是 "c",位移值 k = 2,整個流程會是:

ord("c") → 99 99 - 2 → 97 chr(97) → "a" plain += "a" → 把 "a" 接到解密結果裡

如果整個密文字串是 dcpcpc,每個字元都往回移 2 碼後,就會得到:

d → b c → a p → n c → a p → n c → a dcpcpc → banana

🧭 ord() 與 chr() 快速比較

這兩個函數很適合一起記,因為它們剛好是一組相反的操作。

函數 作用 範例
ord() 把字元轉成數字編碼 ord("a") → 97
chr() 把數字編碼轉回字元 chr(97) → "a"
簡單記法:
ord():字元 → 數字
chr():數字 → 字元

✅ 小結

這個簡易解碼器雖然只有幾行,但練到了不少 Python 基礎觀念。

  • input():取得使用者輸入的密文字串。
  • for 迴圈:逐一處理字串中的每個字元。
  • ord():把字元轉成數字。
  • chr():把數字轉回字元。
  • 字串累加:plain += ... 把解出的字元接起來。
這篇的核心觀念就是:
先把字元變成數字,做位移運算後,再把數字變回字元。

留言

這個網誌中的熱門文章

麻將新手必看!不知道聽什麼牌怎麼辦?超多種實戰聽牌範例,教你怎麼判斷胡牌機會

麻將教學懶人包|從規則到牌理的完整觀念整理(附實戰心得)

【新訓入伍】義務役新兵必看!入伍報到必備清單整理|2026年更新