QR code 產生器¶
什麼時候用得上¶
把一串很長、很容易打錯的東西交給眼前的人,而現場不方便用網路傳:
- onion 網址,五十六個字元的隨機字串,用唸的會出錯
- Tor bridge,一行裡有 IP、指紋與 cert,少一個字元就連不上
- 臨時的聯絡方式,例如一次性的 Matrix 房間
對方用相機對著螢幕就讀走了,中間不經過任何伺服器,也不留下訊息紀錄。
一個實際的場合:帶工作坊的人要把一行 Tor bridge 給現場的參加者,唸出來兩邊都不確定剛才那個是大寫 O 還是數字 0,回去怎麼打都連不上。改成用 QR code 讓對方掃,一次就對。
產生完想確認內容沒錯,用 QR code 讀取器掃回來看看。
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 處理,中文會被截斷成亂碼。
離線可用¶
跟這一區其他工具一樣,程式存進裝置之後沒有網路也能用。把網路關掉試一次,照樣畫得出來,代表你輸入的內容不可能被送到任何地方。
要把這一頁帶著走,見離線閱讀。