【Python實作】簡易解碼器|位移加密法與ASCII 碼的認識
📘 Python 實作|簡易解碼器
練習目的
這次的實作目標,是透過一個簡單的位移解密範例,加強 Python 資料型別與字串處理的觀念。
- 練習字串與整數之間的轉換。
- 認識 ord() 函數。
- 認識 chr() 函數。
- 練習使用 for 迴圈逐字處理字串。
- 理解簡單的位移加密與解密概念。
🔐 位移加密法是什麼?
在密碼學中,有一種非常基本的加密方式,叫做「位移加密法」。
它的做法是:把明文字串中的每一個字元,轉成對應的 ASCII 數字,再加上一個整數 K,得到加密後的字元。
解密:字元的 ASCII 碼 - K
例如當 K = 2 時,字串 banana 的每個字元都往後移兩碼,就會變成:
解密時則相反,只要把密文字串中的每個字元都減去同一個 K,就可以還原成原本的明文。
🧪 完整程式碼
下面是一個簡單的 Python 解碼器。使用者輸入密文字串後,程式會將每個字元往回位移 2 碼。
🖥️ 程式執行結果
假設輸入的密文字串是 dcpcpc,執行結果會像這樣:
解密結果: banana
🔎 程式說明
這段程式的核心在下面這兩行:
它會逐一取出密文字串中的每個字元,轉成 ASCII 數字後減掉位移值,再轉回字元,最後接到解密結果裡。
1. ord(c):把字元變成 ASCII 數字
ord() 的功能,是把一個字元轉成對應的 Unicode 編碼數字。
在這個英文小寫字母的例子中,可以先簡單理解成把字元轉成 ASCII 數字。
所以假設目前處理到的字元是 c,那麼:
2. ord(c) - k:把 ASCII 數字往回移
解密時,要把加密時位移的數字扣回來。
如果 k = 2,而目前字元是 "c":
而 97 正好是 "a" 的編碼。
3. chr(ord(c) - k):把數字變回字元
chr() 的功能,剛好和 ord() 相反。
它會把數字轉回對應的字元。
所以:
4. plain += ...:把解密後的字元接起來
一開始我們先建立一個空字串:
接著每解出一個字元,就把它接到 plain 後面。
這就像把一個個解密後的字元慢慢累積起來,最後形成完整的明文。
🧩 全部串起來的邏輯
假設目前處理的字元是 "c",位移值 k = 2,整個流程會是:
如果整個密文字串是 dcpcpc,每個字元都往回移 2 碼後,就會得到:
🧭 ord() 與 chr() 快速比較
這兩個函數很適合一起記,因為它們剛好是一組相反的操作。
| 函數 | 作用 | 範例 |
|---|---|---|
| ord() | 把字元轉成數字編碼 | ord("a") → 97 |
| chr() | 把數字編碼轉回字元 | chr(97) → "a" |
ord():字元 → 數字
chr():數字 → 字元
✅ 小結
這個簡易解碼器雖然只有幾行,但練到了不少 Python 基礎觀念。
- input():取得使用者輸入的密文字串。
- for 迴圈:逐一處理字串中的每個字元。
- ord():把字元轉成數字。
- chr():把數字轉回字元。
- 字串累加:用 plain += ... 把解出的字元接起來。
先把字元變成數字,做位移運算後,再把數字變回字元。
留言
張貼留言