说明本文^代表异或,**代表幂
第一步:理解伽罗华域(有限域)
伽罗瓦域本质上是一个受限的集合,以及一些数学运算,使得运算的结果仍然在这个集合中。
对于二维码标准来说,要使用位为模数2的算子,字节为模数100011101(本原多项式x**8+x**4+x**3+x**2+1)的算子。这意味着使用GF(2**8),有时写成GF(256)。
GF(256)中的数字都在0到255(含)的范围内。请注意,这也是可以用一个八位比特表示的范围(最大的八位比特是1111_1111,等于255)。
这意味着GF(256)中所有的数学运算都将产生可以用八位字节表示的数字。
第二步:理解伽罗华域内的运算
如前所述,GF(256)包含0到255(含)的数字。GF(256)中的数学运算具有循环性,也就是说,如果在GF(256)中进行数学运算,得到的数字大于255,那么就需要使用求模运算来得到一个仍然在伽罗瓦域中的数字。
在伽罗瓦域中,负数与正数具有相同的值,所以-n=n.换句话说,在伽罗瓦场算术中,始终要使用数字的绝对值。
这就是说,伽罗瓦域内的加法和减法是一回事。伽罗瓦域内的加减法是按正常的方法做加减法,但又要进行模数运算。而由于我们使用的是模2运算(在QR码规范中提到过),这和执行XOR运算是一样的。比如说
1+1=2%2=0
1^1=0
0+1=1%2=1
0^1=1
第三步:用模100011101生成2的幂次
GF(256)中的所有数字都可以用2的幂来表示,具体来说,GF(256)中的所有数字都可以用2**n来表示,其中0 <= n <= 255。然而,如前所述,GF(256)中的所有数字本身必须在0到255的范围内,所以2**8对于伽罗瓦场来说似乎太大了,因为它等于256。
从0到8的2的幂是。
2**0 = 1
2**1 = 2
2**2 = 4
2**3 = 8
2**4 = 16
2**5 = 32
2**6 = 64
2**7 = 128
2**8 = 256
二维码规范中说,要使用字节的模100011