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 处理,中文会被截断成乱码。
离线可用¶
跟这一区其他工具一样,程序存进设备之后没有网络也能用。把网络关掉试一次,照样画得出来,代表你输入的内容不可能被送到任何地方。
要把这一页带着走,见离线阅读。