跳转至

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

离线可用

跟这一区其他工具一样,程序存进设备之后没有网络也能用。把网络关掉试一次,照样画得出来,代表你输入的内容不可能被送到任何地方。

要把这一页带着走,见离线阅读