QR code 產生器¶
什麼時候用得上¶
把一串很長、很容易打錯的東西交給眼前的人,而現場不方便用網路傳:
- onion 網址,五十六個字元的隨機字串,用唸的會出錯
- Tor bridge,一行裡有 IP、指紋與 cert,少一個字元就連不上
- 臨時的聯絡方式,例如一次性的 Matrix 房間
對方用相機對著螢幕就讀走了,中間不經過任何伺服器,也不留下訊息紀錄。
QR code 裡面是明文¶
這件事常被誤會。QR code 不是加密,只是一種把文字畫成方格的編碼。任何拍到那張圖的人都讀得出內容,包括牆上的攝影機、對方手機的相簿備份、你身後的人。
要傳的東西如果本身敏感,先確認現場沒有鏡頭,傳完把畫面關掉。真正需要保密的內容應該用端對端加密的通訊工具傳,QR code 適合的是「公開但難打」的字串。
糾錯等級怎麼選¶
QR code 有內建的糾錯能力,弄髒或遮住一部分還讀得出來。等級越高能修的越多,但同樣的內容需要更大的圖。
| 等級 | 可修復 | 適合 |
|---|---|---|
| L | 7% | 螢幕上直接掃,畫面乾淨 |
| M | 15% | 一般用途,預設值 |
| Q | 25% | 印出來、可能有摺痕或髒污 |
| H | 30% | 貼在戶外,或中間要壓一個圖示 |
在螢幕上給人掃用 L 或 M 就夠,圖比較小、對方的相機也對得比較快。
下載成 SVG¶
「下載 SVG」會存成向量圖檔,放大不會糊,印出來也清楚。那個檔案就在你的裝置上,沒有經過任何伺服器。
要印在紙上或做成貼紙時,建議把糾錯等級調到 Q 或 H,紙會摺、會髒。
離線可用¶
跟這一區其他工具一樣,程式存進裝置之後沒有網路也能用。把網路關掉試一次,它照樣畫得出來,那也表示你輸入的內容不可能被送到任何地方。
要把這一頁帶著走,見離線閱讀。
編碼用的是誰的程式¶
QR 編碼交給 qrcode-generator(MIT 授權),原封不動放在 utils/vendor/ 底下。編碼寫錯的典型後果是產生一個掃得出來但內容錯的碼,那比壞掉更糟,所以用成熟的實作而不是自己重寫。
我們另外寫了一個獨立的解碼器放在測試裡,把產生出來的圖讀回文字再比對,所以「呼叫的方式對不對」有測試守著。那支測試在做的過程中抓到一個真的缺陷:函式庫預設把字串當 Latin-1 處理,中文會被截斷成亂碼。