我们提供【社群管理裂变】【自动建群】【多群转播】【活码系统】【小程序开发】【公众号开发】【各类商城 SAAS】一站式服务,各类功能提供免费体验,满意付款,如您还有其他疑问请您添加企鹅/微信 1003312430 方便咨询哦。
非凡社群助手------微信活码系统演示(客户活码二维码累计扫描量一千万+)
活码系统介绍:
二维码图案不变,内容可随时变更, 极大提高营销效果,基于活码技术,二维码图案更简单,扫码更加容易宣传海报、二维码印刷、商品.群.软文。
让二维码图案更简单,扫码更加容易宣传。
,
先给题主一个小思绪吧,假设这个二维码完好无损,我以四个汉字编为二维码为例(最小尺寸)。
由于在知乎二维码会自动转换成文字,因此原图见该链接:
不想点链接的,可以看手艺处置过的图:
注重事项:
- 下文中的「二维码」一词,默以为 QR 码,即快速响应矩阵图码,同时本文主要解说使用 UTF-8 的情形(文末附 Shift_JIS 的情形);
- 仅限于部门较小的二维码,尺寸过大的,编码的顺序会有交织(纵然是统一尺寸的,可能也要看运气),则不适用于下面的方式。
准备节:熟悉二维码组织
我想人人首次接触二维码时最深的印象一定是三个角落的正方形,由于异常显眼,它们叫寻象图形。事实上,内里可能还隐蔽小正方形(最小尺寸的二维码没有),叫校正图形。此外,毗邻两个相邻的寻象图形的内侧边缘处正好有是非相间的线条,叫定位图形。最后,三个寻象图形的旁边会有一些名堂信息(左上寻象图形的两侧、右上寻象图形的下侧、左下寻象图形的右侧各一排):
而我们真正要破译的部门,则是剩下的浅绿色的区域,固然不是所有,由于其中只有一部门能获得我们想要的数据,剩下的部门是纠错码字(有了它,可以在二维码里贴图徽而仍能扫出)。
值得一提的是,尺寸再大一点的二维码,即校正图形有 6 个及以上时,在右上寻象图形左侧三排、左下寻象图形上侧三排,还会有版本信息这器械,在破译时也要避开这些位置:
最后稍微领会下二维码的解码顺序,整体而言是从右边起,向上向下交织:
好,领会这些区域在破译时要避开后,我们现在可以最先实战演练了!
第一步:去掩码
可能有些人阅读下文后会有人问:去掩码的原理简朴,但笔算(甚至心算)起来要异常仔细。那么掩码存在的意义是什么?可以见这篇谜底:
我们要看左上角的寻象图形正下方的这三块找到响应的掩码:
然后我们不难发现,是下表中的 ((i*j)%3+1+j)%2=0 的名目:
选好名目之后,我们先将掩码铺盖好:
二维码中要去掩码的部门为如下红色区域(即数据与纠错码字区域,由于是最小的二维码,因此没有校正图形):
以白为 0,以黑为 1,去掩码则是将原二维码与掩码统一坐标的数据做半加法(即 XOR,同色得白,异色得黑):
固然也可以交给 Photoshop 处置,确立二维码与掩码图案两个图层(掩码图层在上,二维码图层在下),然后掩码反相,最后两者用差值夹杂图层(由于差值做的是减法,要反相)。
去掉掩码后云云图(未被上上图红色部门笼罩的部门则原封不动,同时注重此时已扫不出来):
第二步:确定种别
我们现在可以最先解码了,不外先不急着破译。我们要先看的是右下用的 4 块:
编码的顺序为 Z 字型(从右下最先曲折往上),即右下、左下、右上、左上。白(浅)记 0,黑(深)记 1,得二进制数 0100:
常见的有 0001 示意「纯数字」,0010 示意「字母数字」(但字母不区分巨细写),0100 示意「8 位字节编码(UTF-8)」(通常使用这种,纵然是纯英文文章或网址),1000 示意「日本汉字(要经由盘算后转换为 Shift_JIS 编码)」。
第三步:确定长度
接着再往上看 8 块(蓝色框内):
同样我们根据 Z 字形的顺序,破译出 0000 1100,转成十进制数为 12:
在差其余编码种别(红框)下,对编码长度的明晰不尽相同,这里用的是字节编码模式,编码长度示意的是字节数,即本文有 12 字节。领会这点异常主要,可以告诉你到那里破译竣事。
值得一提的是,二维码大到一定尺寸时,示意编码长度的区域可能为 8 位以上(视编码种别而定,好比可能扩充为 16 位来示意编码长度),这里不睁开讨论。
第四步:解码破译
前面两关过了后,我们体贴的破译数据就要最先了。我们知道,一个字节有 8 位,则以 8 位为单元一个个破译下来。首先继续往上看 8 块:
按图示的解码顺序,得第一字节为 1110 0100。
根据顺序继续破译第二字节,不外要注重最上面一排著名堂信息的部门,不要编进去,而要转弯向下:
第二字节为 1011 1000。
我们依次破译下去(红色数字示意字节顺序):
我们获得:
- 1110 0100
- 1011 1000
- 1001 1100
- 1110 0101
- 1000 1101
- 1001 0111
- 1110 1000
- 1010 0101
- 1011 1111
- 1110 0101
- 1000 1100
- 1001 0111
第五步:转换文字
这是 UTF-8 编码,有关 UTF-8 可以见,这里不睁开讨论。
我们的目的是将 UTF-8 编码转换成 Unicode 编码然后查找对应字符。由于编码的内容为汉字,在 UTF-8 里每个汉字需用 3 个字节来示意,得前三个字节:
- 第一字节:1110 0100
- 第二字节:1011 1000
- 第三字节:1001 1100
转换成 Unicode 时要去掉这三个字节前面 1110、10、10(上面加下划线的部门),剩下的组合在一起获得:
- 0100 1110 0001 1100
最后转换为十六进制的 4E1C,在电脑中打开字符映射表,查到 U+4E1C 对应「东」字:
(这里只能查表了,除非你能把 Unicode 码表背得滚瓜烂熟。)
同样,后面三个字节:
- 第四字节:1110 0101
- 第五字节:1000 1101
- 第六字节:1001 0111
0101 0011 0101 0111→U+5357→「南」
处置完这 12 个字节后获得「东南西北」四个字,此时破译竣事。
总结图表如下:
(上图中的玄色部门为纠错码字部门,一样平常情形下没有破译的需要,但若是在当中插了图徽或者缺损的二维码,则有可能要行使剩余的纠错模块破译,此时算法较为庞大,本人暂时无法解说。)
应人人的要求,我增添了相对适用的情形,即二维码的网址的破解方式。若是是纯字母的那还相对容易,若是是混有数字的就有一点难度了。
好比本文的链接为:
需要注重的是斜杠「/」,它在 0010(字母数字模式)下也有,在 0100(字节模式 UTF-8)下也有,使用哪一种取决于节约编码长度的方式。
原二维码(原图:):
去除掩码后:
破译细节举例:
附一:字节模式(0100)下的十进制编码表(UTF-8 或 ASCII 码表)
附二:字母数字模式(0010)下的十进制编码表(注重:不适用网址的小写字母,其中 43 代表斜杠)
附:Shift_JIS 处置方式
原二维码见此图:
手艺处置图:
去掉掩码后:
这个时刻我们仍将视线从右下角看起:
此时 Enc 的编码为 1000,属于日本汉字编码之类;Len 为 0010 0111,十进制为 39,注重在日本汉字模式下示意字符数目而非字节数目,即本文有 39 个字符。
然后对照反常的操作最先了,是每 13 位为一组,好比第一组(图中的数字示意顺序,1 到 13 对应权 到
):
获得 13 位二进制数:0101101000110,换成十六进制为 B46。
还没完,还要举行一波操作:
- 将该十六进制数除以 C0 并取整数部门(示例:
);
- 上述效果通常小于或即是 1E,则加上 81;少数情形会大于或即是 1F,此时加上 C1;该效果作为高字节(示例:
,高字节为 90);
- 回到原先的十六进制数,除以 C0 取余数部门(示例:
);
- 上述效果加上 40,该效果作为低字节(示例:
,低字节为 46)。
我们将原先的 B46 转化为到四位十六进制数 9046,对应 Shift_JIS 中的「色」字(注主要将字符集切换成日语,查的是 0x 起头的编码):
同样,我们继续破译紧接着的 13 位二进制数(蓝色部门,从 1 到 13 的顺序):
0000101001101→14D→
- 14D÷C0 取整得 1→1+81=82(高字节)
- 14D÷C0 取余得 8D→8D+40=CD(低字节)
→82CD→「は」
依此类推,我们一个个破译得出:
色は匂へど散りぬるを我が世誰ぞ常ならむ有為の奥山今日越えて浅き夢見じ酔ひもせず
(共 39 字)
还没有人赞赏,快来当第一个赞赏的人吧!
- 2¥
- 5¥
- 10¥
- 20¥
- 50¥
声明:本文来自非凡建群宝投稿,不代表微信机器人立场,版权归原作者所有,欢迎分享本文,转载请保留出处!