之前做了个隐写题,大致意思是二维码里面有段网址,直接扫会到对应的页面,但是会发现什么都发现不了,那么问题来了,隐藏的信息在什么地方。
猜猜都知道估计就是在二维码解析的过程中隐藏了,但是该怎么解析呢?
度娘谷歌都问了,方法是有,解码用zbar+PIL的库即可完成,心想很容易,真正安装了才发现zbar的源码安装包不了,而编译好的exe文件安装完后用python导入还是报错如下:
感觉是失败了,想转移到linux,发现还是zbar的源码依然编译不来。
也就这个时候,我想搜一下zbar有没有删除干净的时候,我发现了这个:
点开一看一闪,我就有点开心了,估计是要加参数,结果-h一下,果然有门,-p后加上图片,即可解析内容:
原来的二维码如下:
还有其他参数:
options: -h, --help display this help text --version display version information and exit -q, --quiet minimal output, only print decoded symbol data -v, --verbose increase debug output level --verbose=N set specific debug output level -d, --display enable display of following images to the screen -D, --nodisplay disable display of following images (default) --xml, --noxml enable/disable XML output format --raw output decoded symbol data without symbology prefix -S<CONFIG>[=<VALUE>], --set <CONFIG>[=<VALUE>] set decoder/scanner <CONFIG> to <VALUE> (or 1)
英文不难,基本意思都能懂。
生成二维码就比较容易了,用qrcode库,下载完直接安装就好了,可能会出现的问题是setup.py的编码有点问题,unicode编码问题,直接在内容前面reload(sys)一下,再设定一下默认编码为gb2312即可。
安装完有个qr.exe,要具体生成一个自定义的二维码,要加的参数还是很多的。不过还是写脚本比较随性一点:
import qrcode from sys import argv a = argv[1] qr = qrcode.QRCode( version=2, //一个整数,范围为1到40,表示二维码的大小(最小值是1,是个12×12的矩阵),如果想让程序自动生成,将值设置为 None 并使用 fit=True 参数即可。 error_correction=qrcode.constants.ERROR_CORRECT_L, //二维码的纠错范围,可以选择4个常量 box_size=10, //每个点(方块)中的像素个数 border=1 //二维码距图像外围边框距离,默认为4,而且相关规定最小为4 ) qr.add_data(a) qr.make(fit=True) img = qr.make_image() img.save("caokefan.png")
error_correction:二维码的纠错范围,可以选择4个常量
ERROR_CORRECT_L 7%以下的错误会被纠正
ERROR_CORRECT_M (default) 15%以下的错误会被纠正
ERROR_CORRECT_Q 25 %以下的错误会被纠正
ERROR_CORRECT_H. 30%以下的错误会被纠正。
工具地址:GitHub