CTF二维码之QR码生成原理与损坏修复(一)
-
前言
最近几次比赛遇到过好几次二维码的题目,打算好好研究一下,前面的内容不多,就从它后面开始记了。二维码的种类有很多,除了我们常见的QR码外,使用比较广泛的还有:PDF417、DM、汉信码等。有兴趣的可以自行查阅,咱们这里只讲QR码
-
二维码基本知识
-
1.QR码一共有40种尺寸,官方叫做版本Version(版本):
Version 1是21x21的矩阵;
Version 2是25x25的矩阵;
Version 3是29x29的矩阵...
每增加一个version,就会增加4的尺寸(或者称单位,看后面就会理解),公式是:(V-1)*4 + 21(V是版本号) 最高Version 40,(40-1)*4+21 = 177,所以最高是177 x 177的正方形。
鉴于大家平时都已经习惯称呼QR码为二维码,我们后面的内容也就不一直强调QR码,而是称为二维码。大家只要明白,我们后面所说的二维码,都是指QR码即可。
- 2.QR码格式结构
二维码结构信息大致如下:
功能图案(function patterns)
特征符(finder pattern)7x7 黑圈 5x5 白圈 3x3 黑块
分割线(separator)在特征符周围的一圈全白区域
时序图案(timing patterns)第 7 行第 7 列的两条黑白条纹
对齐图案(alignment patterns)版本 1 无,版本 2-6 1 个,版本 7-13 6 个……
静默区(quiet zone)至少 4 个单位宽
编码区域(encoding region)
格式信息(format information)左上角分割线外一圈,左下角分割线右侧,右上角分割线下侧
版本信息(version information)版本 7 后才有,在左下分割线上侧,右上分割线左侧
数据及纠错码区域
附下图:
定位图案
无论是哪个版本的二维码,位置探测图形(即大的方块)他的尺寸都是77的模块
同样地,校正图形(小方块)只有在Version 2以上(包括Version2)的二维码中需要这个东西,同样是为了定位用的。它的尺寸也是固定的,为55的模块:
为了增强二维码的容错能力,保证在一定的损坏范围内,不会影响数据的读取,共设计了两个区域来存放两条一模一样的格式信息。
这15个bit在format information区域内的分布以及顺序如下(下图中数字的顺序就是这15个bit的存放顺序,应当注意的是这些数字表示的是位的高低,也就是当获取到格式信息15个bit长度的二进制字符串时,左边为高位,右边为低位,所以最左侧的二进制数字应该在14的位置,最右侧的二进制数字应该在0的位置):

3.容错能力
QR码有容错能力,QR码图形如果有破损,仍然可以被机器读取内容,最高可以到7%~30%面积破损仍可被读取。所以QR码可以被广泛使用在运输外箱上。
常用的容错水平是15%(M级),这能在大多数情况下提供足够的容错能力。
错误修正容量:
L水平 7%的字码可被修正
M水平 15%的字码可被修正
Q水平 25%的字码可被修正
H水平 30%的字码可被修正
-
数据编码的字母数字模式
下面特别讲讲这个:
数字字母模式(Alphanumeric mode)下支持的编码字符有 45 个,把它们从 0 编号至 44。其中 0-9 对应数字 0-9,10-35 对应字母 A-Z,36-44 对应 9 个符号:

一般出题都是这种
-
数据码字和纠错码字
生成纠错码之前要先将所有数据字转换成一个多项式,使其限制于伽罗瓦域,而且后续的四则运算也都是该伽罗瓦域中的运算
简单来说就是多项式的加减法都是异或,乘除法要每一个比特模 2,每一个字节模 100011101(即该伽罗瓦域中的本原多项式
不是很容易理解,于是找了另一篇文章:https://blog.csdn.net/ljm1995/article/details/88819664
-
掩码
QR 码一共有 8 种掩码,每个掩码有一个 3 bits 的编号,和一个生成公式。这个公式用来生成掩码图样,以左上为原点,向右、下为正方向,坐标满足这个公式的点在图样中是黑色(1),不满足的是白色(0),这里不多赘述

-
结语
二维码不是很容易搞懂,先慢慢啃吧 (bushi)
以后有机会再讲一讲更多知识吧。。
·参考与致谢
1.https://www.cnblogs.com/relices/p/QRCode.html(二维码基本知识)
2.https://blog.csdn.net/ljm1995/article/details/88819664(二维码纠错原理)
3.https://blog.csdn.net/yaongtime/article/details/17200401(mod运算)
4.https://www.codenong.com/cs105738710/(伽罗瓦域生成原理)











