前面我們聊了雜湊(Hash)和編碼(Encode),現在要來講最後一個:加密(Encrypt)。
加密應該是這三個裡面最好理解的,因為它就像我們日常生活中幫東西「上鎖」一樣。
但很多人會把加密和編碼搞混,覺得它們都是「可以轉過去、也可以轉回來」的東西。
沒錯,它們都是雙向的,但最大的差別在於:加密需要鑰匙,編碼不需要。
這篇文章會讓你搞懂加密是什麼,以及它跟編碼到底差在哪裡。
加密是什麼?
用腳踏車鎖來理解
加密的概念,就像你幫腳踏車上鎖一樣:
- 上鎖(加密):把腳踏車鎖起來,別人就騎不走
- 解鎖(解密):用鑰匙打開,你就可以騎走
重點是:你需要一把鑰匙。
實際上怎麼運作?
原始資料 + 鑰匙 ──→ Encrypt(加密) ──→ 加密後的資料
加密後的資料 + 鑰匙 ──→ Decrypt(解密) ──→ 原始資料沒有鑰匙,就沒辦法加密或解密。
這就是加密最核心的概念。
加密 vs 編碼:差在哪裡?
很多人會搞混這兩個,讓我們來釐清一下:
| 特性 | 編碼(Encode) | 加密(Encrypt) |
|---|---|---|
| 方向 | 雙向 | 雙向 |
| 需要鑰匙 | ❌ 不需要 | ✅ 需要 |
| 安全性 | 沒有保護作用 | 有保護作用 |
簡單來說:
- 編碼:任何人都可以解開,因為不需要鑰匙
- 加密:只有有鑰匙的人才能解開
三個觀念的完整比較
現在我們可以把雜湊、編碼、加密三個放在一起比較:
| 特性 | 雜湊(Hash) | 編碼(Encode) | 加密(Encrypt) |
|---|---|---|---|
| 方向 | 單向 | 雙向 | 雙向 |
| 需要鑰匙 | ❌ | ❌ | ✅ |
| 能還原嗎 | 不能 | 可以 | 可以(要有鑰匙) |
記住這個口訣:
- 雜湊:單向,沒鑰匙
- 編碼:雙向,沒鑰匙
- 加密:雙向,有鑰匙
加密的三種類型
既然加密需要鑰匙,那鑰匙就有學問了。
我們用「鎖頭」和「鑰匙」來理解會更直觀。
對稱式加密:一個鎖頭,兩把一樣的鑰匙
概念
想像你要寄一個上鎖的箱子給朋友:
- 你有一個鎖頭和兩把一模一樣的鑰匙
- 你留一把,另一把事先給你朋友
- 你把東西放進箱子,用鎖頭鎖起來
- 朋友收到後,用他那把鑰匙打開
因為雙方都有鑰匙,所以:
- 你可以鎖,朋友可以開
- 朋友也可以鎖,你也可以開
雙向都能加密、都能解密。
原始資料 + 鑰匙A ──→ 加密 ──→ 密文
密文 + 鑰匙A ──→ 解密 ──→ 原始資料常見的對稱式加密
AES(Advanced Encryption Standard) 是最常見的對稱式加密演算法。
對稱式的問題
聽起來很方便,但有一個麻煩:你要怎麼把鑰匙安全地交給對方?
如果你把鑰匙用網路傳過去,萬一被攔截,別人也拿到鑰匙了,那你的加密就沒用了。
這就是為什麼會有非對稱式加密。
非對稱式加密:一個鎖頭,一把鑰匙
概念
這次換一個情境:
- 你朋友給你一個打開的鎖頭(但他保留唯一的鑰匙)
- 你把東西放進箱子,用這個鎖頭鎖起來
- 鎖上之後,連你自己都打不開
- 只有你朋友有鑰匙,只有他能打開
這就是非對稱式加密:
- 鎖頭(公鑰):可以公開給任何人,誰都能拿來上鎖
- 鑰匙(私鑰):只有收件人自己有,只有他能解鎖
原始資料 + 公鑰 ──→ 加密 ──→ 密文
密文 + 私鑰 ──→ 解密 ──→ 原始資料那如果要雙向通訊呢?
你可能會想:這樣我只能傳給他,他怎麼傳給我?
答案是:雙方各自都有一組鎖頭和鑰匙。
- 你有:你的鎖頭(公鑰)+ 你的鑰匙(私鑰)
- 朋友有:朋友的鎖頭(公鑰)+ 朋友的鑰匙(私鑰)
這樣:
- 你傳給朋友:用朋友的鎖頭鎖 → 朋友用朋友的鑰匙開
- 朋友傳給你:用你的鎖頭鎖 → 你用你的鑰匙開
常見的非對稱式加密
RSA 是最經典的非對稱式加密演算法,常用於:
- 數位簽章:證明這份文件確實是你發出的
- SSH 金鑰登入:用金鑰登入遠端伺服器,不用打密碼
- 加密電子郵件:像 PGP/GPG 就是用非對稱式加密來保護信件內容
混合式加密:兩種方式一起用
為什麼需要混合式?
非對稱式加密很安全,但有一個缺點:速度比較慢。
如果你要傳一個很大的檔案,全部都用非對稱式加密,會花很多時間。
對稱式加密速度快,但問題是:鑰匙怎麼安全地傳給對方?
聰明的做法是:兩種混著用。
概念
用剛剛的比喻來解釋:
- 第一步:安全地交換鑰匙(用非對稱式)
- 你朋友給你一個打開的鎖頭(公鑰)
- 你自己做一把對稱式的鑰匙
- 你把這把鑰匙放進箱子,用朋友的鎖頭鎖起來,寄給他
- 朋友用他的私鑰打開箱子,拿到那把對稱式鑰匙
- 第二步:用對稱式鑰匙加密資料(速度快)
- 現在你們兩個都有同一把對稱式鑰匙了
- 之後所有的資料都用這把鑰匙加密、解密
- 速度快,又安全
【第一步:交換鑰匙】
對稱式鑰匙 + 對方公鑰 ──→ 加密 ──→ 傳給對方
對方用私鑰解開 ──→ 拿到對稱式鑰匙
【第二步:傳輸資料】
資料 + 對稱式鑰匙 ──→ 加密/解密 ──→ 快速又安全為什麼這樣最好?
- 安全:鑰匙是用非對稱式傳的,就算被攔截也打不開
- 快速:實際資料是用對稱式加密的,速度快
這就是現在大部分安全通訊的做法。
常見的混合式加密
SSL/TLS 就是最經典的混合式加密應用。
你有沒有注意過,有些網址是 http://,有些是 https://?
那個 S 就是指 SSL(Secure),代表這個網站使用了加密來保護你的資料傳輸。
SSL/TLS 的運作方式就是:
- 先用非對稱式加密安全地交換一把對稱式鑰匙
- 之後所有資料都用對稱式加密來傳輸
類似的應用還有:
- HTTPS:HTTP + SSL/TLS
- SFTP:FTP + SSL/TLS
- WSS:WebSocket + SSL/TLS
- VPN:虛擬私人網路
只要看到後面有加 S 的,通常就是有用到 SSL/TLS 加密。
三種加密方式比較
| 特性 | 對稱式加密 | 非對稱式加密 | 混合式加密 |
|---|---|---|---|
| 鑰匙數量 | 1 把(雙方共用) | 2 把(公鑰 + 私鑰) | 兩種都用 |
| 速度 | 快 | 慢 | 快(資料用對稱式) |
| 安全性 | 鑰匙外洩就完蛋 | 公鑰外洩沒關係 | 兼顧安全與效率 |
| 常見演算法 | AES | RSA | SSL/TLS |
| 常見應用 | 檔案加密、資料庫加密 | 數位簽章、SSH 金鑰 | HTTPS、VPN、WSS |
重點整理
來複習一下這篇講的重點:
- 加密是雙向的,可以加密過去,也可以解密回來
- 加密需要鑰匙,這是它跟編碼最大的差別
- 對稱式加密:加密和解密用同一把鑰匙(例如 AES)
- 非對稱式加密:加密和解密用不同鑰匙,分成公鑰和私鑰(例如 RSA)
- 網址後面有 S 的(HTTPS、SFTP、WSS),通常就是有用到 SSL 加密
系列總結
到這邊,雜湊、編碼、加密這三個觀念就都講完了!
再幫大家複習一次:
| 觀念 | 方向 | 鑰匙 | 用途 |
|---|---|---|---|
| 雜湊(Hash) | 單向 | 不需要 | 驗證、密碼儲存 |
| 編碼(Encode) | 雙向 | 不需要 | 格式轉換 |
| 加密(Encrypt) | 雙向 | 需要 | 保護資料 |
搞懂這三個的差別之後,後面在做密碼驗證、Token、JWT 這些東西的時候,就不會再搞混了!