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 处理,中文会被截断成乱码。