CN109657769A - 一种基于游程编码的二维码信息隐藏方法 - Google Patents
一种基于游程编码的二维码信息隐藏方法 Download PDFInfo
- Publication number
- CN109657769A CN109657769A CN201811634488.8A CN201811634488A CN109657769A CN 109657769 A CN109657769 A CN 109657769A CN 201811634488 A CN201811634488 A CN 201811634488A CN 109657769 A CN109657769 A CN 109657769A
- Authority
- CN
- China
- Prior art keywords
- information
- key
- carrier
- bit
- secret
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims abstract description 73
- 238000003780 insertion Methods 0.000 claims description 27
- 230000037431 insertion Effects 0.000 claims description 27
- 230000008569 process Effects 0.000 claims description 24
- 230000009467 reduction Effects 0.000 claims description 9
- 239000000284 extract Substances 0.000 claims description 8
- 230000000717 retained effect Effects 0.000 claims description 6
- 230000011218 segmentation Effects 0.000 claims description 5
- 238000007906 compression Methods 0.000 abstract description 13
- 230000006835 compression Effects 0.000 abstract description 13
- 230000005540 biological transmission Effects 0.000 abstract description 7
- 230000008901 benefit Effects 0.000 abstract description 5
- 238000012937 correction Methods 0.000 description 9
- 229910002056 binary alloy Inorganic materials 0.000 description 8
- 230000008859 change Effects 0.000 description 7
- 230000009182 swimming Effects 0.000 description 6
- 238000012545 processing Methods 0.000 description 4
- 238000011160 research Methods 0.000 description 4
- 230000008929 regeneration Effects 0.000 description 3
- 238000011069 regeneration method Methods 0.000 description 3
- 241000208340 Araliaceae Species 0.000 description 2
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 2
- 235000003140 Panax quinquefolius Nutrition 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013144 data compression Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 235000008434 ginseng Nutrition 0.000 description 2
- 239000011159 matrix material Substances 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 101100517651 Caenorhabditis elegans num-1 gene Proteins 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000005336 cracking Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 239000004615 ingredient Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 239000000203 mixture Substances 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008447 perception Effects 0.000 description 1
- 238000005498 polishing Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K19/00—Record carriers for use with machines and with at least a part designed to carry digital markings
- G06K19/06—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code
- G06K19/06009—Record carriers for use with machines and with at least a part designed to carry digital markings characterised by the kind of the digital marking, e.g. shape, nature, code with optically detectable marking
- G06K19/06046—Constructional details
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06K—GRAPHICAL DATA READING; PRESENTATION OF DATA; RECORD CARRIERS; HANDLING RECORD CARRIERS
- G06K7/00—Methods or arrangements for sensing record carriers, e.g. for reading patterns
- G06K7/10—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation
- G06K7/14—Methods or arrangements for sensing record carriers, e.g. for reading patterns by electromagnetic radiation, e.g. optical sensing; by corpuscular radiation using light without selection of wavelength, e.g. sensing reflected white light
- G06K7/1404—Methods for optical code recognition
- G06K7/1495—Methods for optical code recognition the method including an image compression step
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0863—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving passwords or one-time passwords
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Computer Security & Cryptography (AREA)
- Health & Medical Sciences (AREA)
- Electromagnetism (AREA)
- General Health & Medical Sciences (AREA)
- Toxicology (AREA)
- Artificial Intelligence (AREA)
- Computer Vision & Pattern Recognition (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Editing Of Facsimile Originals (AREA)
Abstract
本发明公开了一种基于游程编码的二维码信息隐藏方法,将载体信息carrier与秘密信息secret同时处理;在二维码生成之前,通过加密算法将待加密的秘密信息secret嵌入载体信息carrier内,再将已加密信息生成二维码图像QR,并生成密钥Key;发送方将上述二维码图像QR发送给接收方;接收方接到上述二维码图像QR后,通过解密算法进行解密获得载体信息carrier与秘密信息secret。采取游程编码算法,将文本信息进行压缩得到可嵌入信息的比特位,以此达到本发明的加密目的。本发明的基于游程编码的二维码信息隐藏方法,具有传输的信息量大、信息隐蔽性好、有很高的鲁棒性以及抗压缩性、安全性高等优点。
Description
技术领域
本发明涉及一种信息隐藏方法,尤其是一种基于游程编码的二维码信息隐藏方法。
背景技术
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。
从视觉上看,QR码是由多个黑白块组成的,这些黑白块在一块矩形区域内“随机排列”,人眼无法识别出任何的信息。实质上,QR码中黑白块的位置是按照一个矩阵形式排列的,每一个位置上的黑块或白块分别用来表示二进制中的0、1,以此来存储需要的信息。QR二维码图像由数据区和功能图像组成。其中,数据区的内容记录了数据码、纠错码、QR码的格式信息和版本信息等,这一部分也就是二维码真正能够读取出来的信息内容。功能区包括了位置探测图形、定位图像、分隔符以及校正图形,这一部分的图形主要是为了用于标记二维码的矩形大小、确定二维码扫描时的位置,确保能够准确识别并提取出QR码中存储的信息。QR码的数据区内容各不相同,但每一个QR码的功能图形部分位置及图像都是基本确定的,它不会受到数据区中其他信息的影响。
随着二维条形码的广泛应用,二维码图像隐藏技术已开始逐渐受到国内外学者的重视。当前对二维码隐藏的研究主要可分为以二维码为载体和以二维码为秘密信息等两种隐藏算法的研究。目前,对二维码的信息隐藏的研究主要集中于前者,并且其研究止步于图像层面,没有涉及到编码方式以及二维码结构方面。
二维码将文本与图像结合在一起,传统的二值图像或者文本信息隐藏已无法适用。传统的二值图像信息隐藏算法可能会改变二维码本身地结构,导致二维码不可识别,反而暴露出其中隐藏信息。因为二维码识别出的文字信息无格式颜色等信息,所以传统的文本信息隐藏亦无法适用。这时,基于二维码的信息隐藏算法应运而生,如将二维码转换位灰度图,再利用LSB算法嵌入秘密信息,再还原为二值图像,但是这样可能会改变其二维码本身结构。
申请号为“201710030679.2”、公开号为“106815544A”的中国发明专利公开了一种基于二维码的信息隐藏方法,基于QR码对编码的原始数据的纠错性能,将需要隐藏的信息以基于比特位并提供BCH纠错的形式嵌入到编码中,然后再采用与隐藏信息嵌入相对应的提取方法提取隐藏信息,从而达到传递隐藏信息的目的。但是并未涉及如何对加密信息进行加密和解密。
发明内容
本发明是为避免上述已有技术中存在的不足之处,提供一种基于游程编码的二维码信息隐藏方法,以实现将二维码和文本信息相结合并快速安全地传输的目的。
本发明为解决技术问题采用以下技术方案。
一种基于游程编码的二维码信息隐藏方法,其特点是,输入载体信息carrier与秘密信息secret;先采用游程编码的方式,将载体信息carrier输入密钥生成流程并生成密钥Key;通过加密算法,将待加密的秘密信息secret嵌入载体信息carrier内获得加密文本EncryptText,然后由加密文本EncryptText生成二维码图像QR;发送方将上述二维码图像QR发送给接收方;接收方接到上述二维码图像QR后,通过解密算法进行解密获得载体信息carrier与秘密信息secret。
本发明的一种基于游程编码的二维码信息隐藏方法的结构特点也在于:
所述密钥生成流程包括如下步骤:
步骤SK1:获取载体信息carrier;
步骤SK2:将载体信息carrier根据UTF-8编码规则,转换为二进制字符串c_bit;
步骤SK3:对于二进制字符串c_bit,将其中的每8位bit作为一个字节byte,得到多个字节byte;将多个字节byte,依次对每个字节byte遍历;根据UTF-8编码规则,判断每个字节byte的头部格式编码长度,并得到每个字节byte的起始截取位置site;
步骤SK4:对于多个字节byte的每一个字节byte,截取该字节byte中的起始截取位置site之后的字符串;
步骤SK5:将多个字节byte的每个byte截取后的多个字符串,依次按照顺序排列后合成一个字符串c_new_bit;
步骤SK6:新建第一数组key_num1[],所述第一数组key_num1[]的第一位元素为c_new_bit的第一位元素;
步骤SK7:对于字符串c_new_bit,按照每个bit依次遍历c_new_bit,记录与上一个bit的数字相同的个数count,即count为该bit的数字连续相同的字符的个数,如数字为000,则个数count为3,获得第一数组key_num1[];
步骤SK8:将所述的第一数组key_num1[]作为密钥Key。
输入的信息为载体信息carrier、秘密信息secret;所述加密算法包括如下步骤:
步骤E1:输入载体信息carrier,秘密信息secret;
步骤E2:将载体信息carrier输入至密钥生成流程得到密钥Key,同时嵌入参数容量capacity;
步骤E3:根据UTF-8编码规则,将秘密信息secret转化为二进制字符串s_bit;
步骤E4:判断capacity是否大于等于s_bit的长度;判断结果为“是”,则继续下一步操作;若判断结果为“否”程序结束,输出“容量不足”的结果;
步骤E5:保留密钥Key的第一位;从密钥Key的第二位开始,对于每一位都要先判断该位的原始值是0还是1,并将这个原始值保留;
步骤E6:然后根据每一位的数字,判断密钥Key的这一位能够插入的二进制数字的位数,并将二进制字符串s_bit由前至后依次插入;
步骤E7:遍历密钥Key后,根据载体信息carrier的UTF-8格式编码,将二进制字符串s_bit分段嵌入载体信息carrier之中,得到嵌入加密信息的加密文本EncryptText;
步骤E8:输出加密文本EncryptText,并根据加密文本EncryptText生成可传输二维码图像QR;
步骤E9:输出二维码图像QR和密钥Key。
所述步骤E6中,判断密钥Key的这一位能够插入的二进制数字的位数,由密钥Key的这一位数字减一计算而得出。
所述解密算法包括如下步骤:
步骤D1:获得输出二维码图像QR和密钥Key,从中获得加密文本EncryptText;
步骤D2:将加密文本EncryptText进行UTF-8编码,提取非格式编码内容e_nsym;
步骤D3:根据密钥Key,从非格式编码内容e_nsym中获取秘密信息secret的二进制字符串s_bit,并根据s_bit还原秘密信息secret的原始信息。
所步骤D3之后,还包括从非格式编码内容e_nsym中去除秘密信息secret后,获取载体信息carrier的步骤。
与已有技术相比,本发明有益效果体现在:
本发明的一种基于游程编码的二维码信息隐藏方法,将二维码与文本信息隐藏相结合,不局限于图片或者文字,借助二维码,将二者相结合。利用游程压缩编码的思想,将文本信息进行压缩得到可嵌入信息的比特位。传统的游程编码将文本压缩,改变原有的长度,为了达到嵌入以及不改变原有结构。基于二维码的编码规则UTF-8(8-bit UnicodeTransformation Format)编码,首先将文本信息的非格式部分提取出来,其次另设置一个相同长度的密钥值,用来存储嵌入过程中必不可少的密钥数据。
二维码作为一种容错率很高的图形,能很好的将本文嵌入信息后的乱码文本,通过二维码将之转换为同样无序的布满黑白方块的图片,在视觉上达到一定程度的混淆。
本发明具有以下几个优点。
(1)在信息隐藏领域中,除了对隐蔽性有很高的要求之外,信息隐藏的容量也是作为判断其算法的可靠性的一个标准。本发明的隐藏率大概能达到40%左右,即传输的信息是其他算法的几倍,同时又能保证其隐蔽性。
(2)本发明中,在二维码生成之前,将载体信息进行处理,再生成可传输二维码图像,这样就避免了已嵌入信息二维码暴露的可能性,正常扫码软件只能看到不一样的信息,只有用专门的解码器才能解析其中载体信息以及秘密信息。
(3)因为二维码本身的鲁棒性以及抗压缩性,我们较之于其他二值图像信息隐藏算法,有很高的鲁棒性以及抗压缩性。
(4)加入的掩码算法,通过还原其可以很好的识别原二维码信息是否被篡改或者损坏,安全性高。
本发明的一种基于游程编码的二维码信息隐藏方法,具有传输的信息量大、信息隐蔽性好、有很高的鲁棒性以及抗压缩性、安全性高等优点。
附图说明
图1为本发明的一种基于游程编码的二维码信息隐藏方法的加密流程图。
图2为本发明的一种基于游程编码的二维码信息隐藏方法的密钥生成流程图。
图3为本发明的一种基于游程编码的二维码信息隐藏方法的解密流程图。
图4为现有技术的游程编码的示意图。
图5为本发明采用的改进后的游程编码的示意图。
图6为本发明的具体实施例的加密过程。
以下通过具体实施方式,并结合附图对本发明作进一步说明。
具体实施方式
参见图1-6,1、一种基于游程编码的二维码信息隐藏方法,其特征是,输入载体信息carrier与秘密信息secret;先采用游程编码的方式,将载体信息carrier输入密钥生成流程并生成密钥Key;通过加密算法,将待加密的秘密信息secret嵌入载体信息carrier内获得加密文本EncryptText,然后由加密文本EncryptText生成二维码图像QR;发送方将上述二维码图像QR发送给接收方;接收方接到上述二维码图像QR后,通过解密算法进行解密获得载体信息carrier与秘密信息secret。
(本发明的基于游程编码的二维码信息隐藏方法,信息的发送方采用游程编码的方式,将待加密的秘密信息嵌入载体文本中,同时生成提取密钥Key。将处理后的信息根据用户需求生成可传输二维码图像QR。接收方用户可利用正常二维码解码软件,对二维码图像QR正常解码获得文本信息。从该文本信息中,根据提取密钥Key即可实现载体信息carrier和秘密信息secret的正确提取。实验证明,本发明的方案,能极大地保证信息的完整性和具有极强的抗压缩性,并且在普通情况写即可拥有较大的隐藏率。
本发明的基于游程编码的二维码信息隐藏方法,在二维码生成之前,将载体信息进行处理,再生成可传输二维码图像,这样就避免了已嵌入信息二维码暴露的可能性。正常扫码软件只能看到不一样的信息,只有用专门的解码器才能解析其中载体信息以及秘密信息。本发明利用二维码无法被肉眼识别的特性,使秘密信息得到很好的隐藏。)
2、根据权利要求1所述的一种基于游程编码的二维码信息隐藏方法,其特征是,所述密钥生成流程包括如下步骤:
步骤SK1:获取载体信息carrier;
步骤SK2:将载体信息carrier根据UTF-8编码规则,转换为二进制字符串c_bit;(二进制字符串c_bit是所述载体信息carrier,根据UTF-8编码规则转换而成的。)
步骤SK3:对于二进制字符串c_bit,将其中的每8位bit作为一个字节byte,得到多个字节byte;将多个字节byte,依次对每个字节byte遍历;根据UTF-8编码规则,判断每个字节byte的头部格式编码长度,并得到每个字节byte的起始截取位置site;(起始截取位置site作为一个可变的中间参数,只在算法流程中生成并使用。基于每个字节,范围为1到8,1代表全部截取,8代表不截取。)
步骤SK4:对于多个字节byte的每一个字节byte,截取该字节byte中的起始截取位置site之后的字符串;(例如,对于一个字节byte,如果第一个bit为0,则设定截取该字节的起始位置为第2bit,即取后7个bit的字符串;若前两个bit为10,则设定截取该字节的起始位置为第3bit,即取后6个bit的字符串;若前三个bit为110,则设定截取该字节的起始位置为第4bit,即取后5个bit的字符串;若前四个bit为1110,则设定截取该字节的起始位置为第5bit,即取后4个bit的字符串;若前五个bit为11110,则设定截取该字节的起始位置为第6bit,即取后3个bit的字符串;若前六个bit为111110,则设定截取该字节的起始位置为第7bit,即取后2个bit的字符串。)
步骤SK5:将多个字节byte的每个byte截取后的多个字符串,依次按照顺序排列后合成一个字符串c_new_bit;(按照原字节序合成,和上面描述的一样,因为后续解密还原需要根据原有顺序将嵌入过信息的字符串分割并提取信息并还原成原有载体信息carrier;)
步骤SK6:新建第一数组key_num1[],所述第一数组key_num1[]的第一位元素为c_new_bit的第一位元素;
步骤SK7:对于字符串c_new_bit,按照每个bit依次遍历c_new_bit,记录与上一个bit的数字相同的个数count(,即count为该bit的数字连续相同的字符的个数,如数字为000,则个数count为3;),获得第一数组key_num1[];
步骤SK8:将所述的第一数组key_num1[]作为密钥Key。
3、根据权利要求2所述的一种基于游程编码的二维码信息隐藏方法,其特征是,输入的信息为载体信息carrier、秘密信息secret;所述加密算法包括如下步骤:
步骤E1:输入载体信息carrier,秘密信息secret;
步骤E2:将载体信息carrier输入至密钥生成流程得到密钥Key,同时嵌入参数容量capacity;(参数容量capacity是本算法的一个特征,在生成Key之后,根据Key计算容量并用于算法判断,不用嵌入Key中,因为容量就是算法执行过程中根据Key计算出来的参数;)
步骤E3:根据UTF-8编码规则,将秘密信息secret转化为二进制字符串s_bit;
步骤E4:判断capacity是否大于等于s_bit的长度;判断结果为“是”,则继续下一步操作;若判断结果为“否”程序结束,输出“容量不足”的结果;
步骤E5:保留密钥Key的第一位;从密钥Key的第二位开始,对于每一位都要先判断该位的原始值是0还是1,并将这个原始值保留;(这个原始值即载体信息carrier中连续相同的重复数字,而且是0和1间隔出现;第二位的原始值和密钥Key的第一位有关,二者是不同的;即,如果密钥Key的第一位是1,则第二位是0;若密钥Key的第一位是0,则第二位是1。具体见本文中简化的游程编码算法。)
步骤E6:然后根据每一位的数字,判断密钥Key的这一位能够插入的二进制数字的位数,并将二进制字符串s_bit由前至后依次插入;
步骤E7:遍历密钥Key后,根据载体信息carrier的UTF-8格式编码,将二进制字符串s_bit分段嵌入载体信息carrier之中,得到嵌入加密信息的加密文本EncryptText;
步骤E8:输出加密文本EncryptText,并根据加密文本EncryptText生成可传输二维码图像QR;
步骤E9:输出二维码图像QR和密钥Key。
所述步骤E6中,判断密钥Key的这一位能够插入的二进制数字的位数(即插入的二进制数字的个数),由密钥Key的这一位数字减一计算而得出。
所述解密算法包括如下步骤:
步骤D1:获得输出二维码图像QR和密钥Key,从中获得加密文本EncryptText;
步骤D2:将加密文本EncryptText进行UTF-8编码,提取非格式编码内容e_nsym;
步骤D3:根据密钥Key,从非格式编码内容e_nsym中获取秘密信息secret的二进制字符串s_bit,并根据s_bit还原秘密信息secret的原始信息。
所步骤D3之后,还包括从非格式编码内容e_nsym中去除秘密信息secret后,获取载体信息carrier的步骤。
本发明的一种基于游程编码的二维码信息隐藏方法,类比于其他信息隐藏算法,其最大的特色就是将二维码与文本信息隐藏相结合,不局限于图片或者文字,借助二维码将二者相结合,是本发明最大的创新点。本发明将载体信息与秘密信息同时进行处理,在二维码生成之前,将待加密的秘密信息,通过的算法嵌入载体信息内,再将已加密信息生成可传输二维码图像。
本发明采取一种新型的改进后的游程编码算法,利用游程压缩编码的思想,将文本信息进行压缩得到可嵌入信息的比特位,以此达到本发明的加密目的。传统的游程编码将文本压缩,改变原有的长度,为了达到嵌入以及不改变原有结构。本发明则是基于二维码的编码规则UTF-8编码,首先将文本信息的非格式部分提取出来,其次另设置一个相同长度的密钥值,用来存储嵌入过程中必不可少的密钥数据。
本发明中,指定的载体信息carrier为汉字“信息隐藏”,指定的秘密信息secret为汉字“秘”,以此为例说明加密、解密和生成密钥Key的过程。则根据提取密钥算法,将载体信息carrier转换为UTF-8编码。密钥生成的过程如下所述几个步骤依次执行。
步骤SK1:输入的载体信息carrier为汉字“信息隐藏”。
步骤SK2:采用UTF-8编码,将载体信息carrier“信息隐藏”转换为二进制字符串c_bit。
载体信息中,汉字“信”转换成UTF-8编码是:['11100100','10111111','10100001'];“息”转换成UTF-8编码是:['11100110','10000001','10101111'];“隐”转换成UTF-8编码是:['11101001','10011010','10010000'];“藏”转换成UTF-8编码是:['11101000','10010111','10001111']。由此可知,载体信息“信息隐藏”所对应的字符串,即载体信息字符串c_bit为“111001001011111110100001111001101000000110101111111010011001101010010000111010001001011110001111”,长度为12byte,96个bit。
步骤SK3:对于二进制字符串c_bit,将其中的每8位bit作为一个字节byte,得到多个字节byte;将多个字节byte,依次对每个字节byte遍历;根据UTF-8编码规则,判断每个字节byte的头部格式编码长度,并得到起始截取位置site;
对于以上UTF-8编码的起始截取位置site,将非格式编码截取提出的方式如下。
1)0xxxxxxx字符串起始截取位置site:第2bit;从第2位开始保留,截取后7位;
2)10xxxxxx字符串起始截取位置site:第3bit;从第3位开始保留,截取后6位;
3)110xxxxx字符串起始截取位置site:第4bit;从第4位开始保留,截取后5位;
4)1110xxxx字符串起始截取位置site:第5bit;从第5位开始保留,截取后4位;
5)11110xxx字符串起始截取位置site:第6bit;从第6位开始保留,截取后3位;
6)111110xx字符串起始截取位置site:第7bit;从第7位开始保留,截取后2位;。
以上“x”代表截取后要保留的位。
步骤SK4:利用以上非格式编码截取提出的方式,“信”的UTF-8编码['11100100','10111111','10100001']中,第1个byte'11100100'符合上述第4条,从第5位截取后获得“0100”;第2个byte'10111111'符合上述第2条,从第3位截取后获得“111111”;第3个byte'10100001'符合上述第2条,从第3位截取后获得“100001”。综上,“信”的UTF-8编码['11100100','10111111','10100001']截取后为“0100111111100001”。按照该方法,对“息隐藏”等几个汉字的UTF-8编码分别进行截取,截取后的结果依次为“0110000001101111”、“1001011010010000”和“1000010111001111”。
步骤SK5:将多个字节byte的每个byte截取后的多个字符串,按照顺序依次排列,从而合成一个字符串c_new_bit。
按照以上方法,对载体信息“信息隐藏”的字符串c_bit“111001001011111110100001111001101000000110101111111010011001101010010000111010001001011110001111”的每一个byte,依次进行截取。按照该方法,对“信息隐藏”等几个汉字的UTF-8编码分别进行截取,截取后的结果依次为“0100111111100001”、“0110000001101111”、“1001011010010000”和“1000010111001111”。然后,将截取后获得的字符串合成获得字符串c_new_bit。利用以上编码截取方式进行截取后的c_new_bit为“01001111111000010110 00000110111110010110100100001000010111001111”。
步骤SK6:新建第一数组key_num1[],第一数组key_num1[]的第一位元素为c_new_bit“0100111111100001011000000110111110010110100100001000010111001111”的第一位元素0,第一数组key_num1[]的第二位元素为c_new_bit的第一位元素0连续出现的次数1;
第一数组key_num1[]的第一位数字是c_new_bit的第1位0;key_num1[]为[0……];
步骤SK7:对于字符串c_new_bit,按照每个bit依次遍历c_new_bit,按照简化游程编码的方式,记录与上一个bit相同的个数count(,即连续相同的字符的个数;),获得一个第一数组key_num1[]为[0,1,1,2,7,4,1,1,2,6,2,1,5,2,1,1,2,1,1,2,1,4,1,4,1,1,3,2,4];
第一数组key_num1[]的获取过程如下:
第一数组key_num1[]的第二位数字是这个0在此连续出现的次数,0在此出现1次,则该0数字出现的次数为1,即第二位数字是该次数1;key_num1[]为[0,1……];
第一数组key_num1[]的第三位数字,是c_new_bit的第二个数字1出现的次数,也是1;即第三位数字为1;key_num1[]为[0,1,1……];
第一数组key_num1[]的第四位数字,是c_new_bit的第三个数字0出现的次数,0这次出现2次,则该第四位数字为2;key_num1[]为[0,1,1,2……];
第一数组key_num1[]的第五位数字,是以上2个0之后的1出现的次数,这个1在此连续出现了7次,故此该第五位数字为7;key_num1[]为[0,1,1,2,7……];
第一数组key_num1[]的第六位数字,是以上7个数字1之后的0出现的次数,这个0出现了4次,故此该第六位数字为4;key_num1[]为[0,1,1,2,7,4……];
第一数组key_num1[]的第七位数字,是以上4个数字0之后的1出现的次数,这个1出现了1次,故此该第七位数字为1;key_num1[]为[0,1,1,2,7,4,1……];
……
按照上述的方式,将c_new_bit“0100111111100001011000000110111110010110100100001000010111001111”中的每一位bit依次遍历,依次获得了上述第一数组key_num1[]为[0,1,1,2,7,4,1,1,2,6,2,1,5,2,1,1,2,1,1,2,1,4,1,4,1,1,3,2,4]。
步骤SK8:将所述的第一数组key_num1[],即[0,1,1,2,7,4,1,1,2,6,2,1,5,2,1,1,2,1,1,2,1,4,1,4,1,1,3,2,4]作为最终密钥Key。
该如上所述,该第一数组key_num1[]的获取采用了图5的改进的游程编码的方式。该改进的简化游程编码,是针对二进制字符串进行编码的过程,比常规的游程编码减少了位数。
常规的游程编码,将一个相同值的连续串用一个代表值和串长来代替,如图4所示。由于本文中的字符串是二进制的编码,非0即1,因此代表值的规律是0和1相间的。游程编码是栅格数据压缩的重要编码方法,其基本思路是将一个相同值的连续串用其值和字符重复的个数来替代表示,从而使数据长度少于原始数据的长度。而在处理图像时,各行(或列)方向上排列的具有相同灰度值的连续像素块也可看成是这样的串,当像素块发生变化时依次记录灰度值以及相同像素块重复的个数,从而实现数据的压缩。游程编码的主要目的便是统计连续相同字符的个数,将字符种类和数量记录下来,解码时则根据字符种类以及其重复的个数,恢复原来的数据。如图4所示,上面一栏数据为编码前的二进制数据,下面一栏数据为编码后的数据;第二栏的第一个数据为1,表示上面一栏的二进制编码的第一位数据是1;第二栏的第二个数据为3,表示第一栏的数据的前三位都为1;第二栏的第三个数据为0,表示第一栏的前三位数据之后的从第四位开始是0,第二栏的第四个数据为4,表示第一栏的数据从第四位开始到第七位有4个数据为0。由以上分析可知,
图4的游程编码,两个数据为一组,第一位为实际数据,第二位为该第一位数据连续出现的个数;即:该组数据的第一位表示数据是0或者1,第二位表示有几个0或者1。如此,可节约大量的空间,实现数据的压缩。图4的前8位数据13041201中,第一组数据13的第一位是1,这个1连续出现了3次;第二组数据04,连续的3个1之后的下一位数据位0,0连续出现了4次;第三组数据12表示再接着的数据为1,本次1出现了2次;第四组01表示继续出现的数据位0,本次0出现了1次;依次类推,可将第一组的数据全部表示出来。
由以上图4的分析可知,每组数据的第一位是0或者1,第二位数据表示这一组有几个0或者几个1。根据图4的方法,游程编码的第一组的第一位如果是0,那么下一组数据的第一位必定是1。也就是说,根据常规游程编码的方式,相邻两组的数据的第一位肯定是不同的,连续相邻的多组数据的第一位数据,是0和1相间出现的。据此,我们提出的改进的简化游程编码,只记录第一个出现的代表值,即只记录第一组的第一位数值。在第二组数据的第一位,肯定是和第一组的第一位数据不同的数值;对于第二组数据,我们只需给出其串长,而省去该代表值;该代表值可由上一位代表值来推定得出,简化游程编码如图5所示。如此一来,从第二组数据开始,就省去了传统的游程编码的第一位,每组数据就只保留传统的游程编码的表示有几个0或者几个1的串长。这样的编码方式,省去了代表值,从而能够减少密钥的长度,能够提高密钥的安全性,便于存储,减少程序的占用空间。
图5的编码13421244表示,第一位数据是1,1出现了3次;接下来出现的是0,0有4个;再接下来的数据2是2个1,之后是1个0,再后是2个1,再后是4个0,最后是4个1。由此可将第一组的11100001101100001111,全部表示出来。
本发明采用的是图5的方法。该方法和图4的方法相比,在第一组数据的第一位的实际数据,只保留第二位,即该第一位数据连续出现的个数。如此表示,是基于第一位数据不是0就是1,而且是0和1依次间隔出现。因此,即使省去了第一位的实际数据,也能够根据整个编码的第1位数据0或者1,推算出第二个出现的数据是与第一位实际数据不同的1或者0,进而依次推算之后的其他数据。
二维码图像是典型的二值图像,即所有的像素只有两种取值,将连续出现的黑色像素标记为黑色游程,连续出现的白色像素标记为白色游程,以此来减少实际的编码长度和冗余度。
举个例子,假设用0代表黑块,1代表白块,现有一4*4的二值图像如图所示,表示原始数据0011111001100011,为16位数据;经过游程编码便可得到压缩数据021502120312,为12位数据,与原始数据相比多出了4位的空位。这样一来,就可以用过压缩无用的明文数据,将想要传输的密文数据隐藏在二维码中进行传输了。按照本发明的如图5的方法,则压缩数据为0252232,为7位数据,比原始数据多出了9位的空位。
同时,在原有的游程编码定义中,为了适应本文的需要,将游程编码进行了一次改进。在原编码规则不变的情况下,二进制字符串的特性是重复的字符非1即0,为此,只需要记录第一位字符和后续重复字符的个数,便可计算出后续字符的种类和长度,如图5示。
对于步骤SK7的第一数组key_num1[],将第一数组key_num1[]的第一位数字不动。将第一数组key_num1[]从第二位开始的每一位数字减1,获得一个新的第二数组key_num2[],还能进一步计算出嵌入容量capacity。所述第二数组key_num2[]比第一数组key_num1[]少一位。
将该第二数组key_num2[]的每一位数值一个个依次累加,累加获得的数值即为该载体信息carrier的嵌入容量capacity。
例如,上述第一数组key_num1[]为[0,1,1,2,7,4,1,1,2,6,2,1,5,2,1,1,2,1,1,2,1,4,1,4,1,1,3,2,4],第一位略去且从第二位开始减1后获得的第二数组key_num2[]为[0,0,1,6,3,0,0,1,5,1,0,4,1,0,0,1,0,0,1,0,3,0,3,0,0,2,1,3]。
根据本发明的简化游程编码的规则,从第二位开始是数值出现的个数,也就是数值所占的位数。由此可知第一数组中,从第二位数字到最后一位数字的和,是整个c_new_bit的总位数。c_new_bit“010011111110000101100000011011111001011010010000100001 0111001111”为64位,即第一数组key_num1[]的[0,1,1,2,7,4,1,1,2,6,2,1,5,2,1,1,2,1,1,2,1,4,1,4,1,1,3,2,4],从第二1开始“1,1,2,7,4,1,1,2,6,2,1,5,2,1,1,2,1,1,2,1,4,1,4,1,1,3,2,4”等数值表示的是各位数值的串长,也就是各位数出现的个数,那么这个总和为64,即c_new_bit的位数64。
获得的第二数组key_num2[]为[0,0,1,6,3,0,0,1,5,1,0,4,1,0,0,1,0,0,1,0,3,0,3,0,0,2,1,3],长度为29位;由于原数组c_new_bit为64位数值,则可以空出35位用于嵌入其他信息。之所以采用将第一数组key_num1[]从第二位开始减1计算第二数组key_num2[]的方式,是为了便于从由所述第二数组key_num2[],来计算获得的最终密钥Key的嵌入容量capacity,即最终密钥Key能够嵌入的信息的位数。嵌入容量capacity的计算过程如下:第二数组key_num2[]从第二开始的数值“0,0,1,6,3,0,0,1,5,1,0,4,1,0,0,1,0,0,1,0,3,0,3,0,0,2,1,3”中,都减去1后表示每一位除了本位以外还能留出的空间,其和为36,则说明编码后能够总共能够空出来的位数为36位,减去第一位数值0占用的一位,为35位。由此可知,该最终密钥Key的嵌入容量capacity为35位。
所述加密算法包括如下步骤:
步骤E1:输入载体信息carrier,秘密信息secret;
步骤E2:将载体信息carrier输入至密钥生成流程得到密钥Key,同时嵌入参数容量capacity;(参数容量capacity是本算法的一个特征,在生成Key之后,根据Key计算容量并用于算法判断,不用嵌入Key中,因为容量就是算法执行过程中根据Key计算出来的参数;)
步骤E3:根据UTF-8编码规则,将秘密信息secret转化为二进制字符串s_bit;
步骤E4:判断capacity是否大于等于s_bit的长度;判断结果为“是”,则继续下一步操作;若判断结果为“否”程序结束,输出“容量不足”的结果;
步骤E5:保留密钥Key的第一位;从密钥Key的第二位开始,对于每一位都要先判断该位的原始值是0还是1,并将这个原始值保留;(这个原始值即载体信息carrier中连续相同的重复数字,而且是0和1间隔出现;第二位的原始值和密钥Key的第一位有关,二者是不同的;即,如果密钥Key的第一位是1,则第二位是0;若密钥Key的第一位是0,则第二位是1。具体见本文中简化的游程编码算法。)
步骤E6:然后根据每一位的数字,判断密钥Key的这一位能够插入几位二进制数字,并将二进制字符串s_bit由前至后依次插入;
步骤E7:遍历密钥Key后,根据载体信息carrier的UTF-8格式编码,将二进制字符串s_bit分段嵌入载体信息carrier之中,得到嵌入加密信息的加密文本EncryptText;
步骤E8:输出加密文本EncryptText,并根据加密文本EncryptText生成可传输二维码图像QR;
步骤E9:输出二维码图像QR和密钥Key。
如图2所示,在步骤E5-E7中,先提取密钥Key中第一位元素,记为flag;然后,新建字符串s_output为空字符串,同时将s_output的起始截取位置site1置为0,并将起始截取位置site1作为新建字符串s_output的位置标记;
然后,依次遍历Key中第二个及第二个以后的所有元素,一次遍历完成后记次数i=2;该遍历过程包括如下步骤E61和步骤E62;
步骤E61:新建count_site=Key[i],Key[i]表示Key的第i位元素;site_insert用于标记s_bit剩余未被截取的首位字符起始位置,初始值为0;新建字符串s_insert;字符串s_insert的具体值为截取s_bit[site_insert,site_insert+count_site]字符串,即为以site_insert为起始点,长度为count_site的字符串,完成操作之后,更新site_insert;即site_insert=site_insert+count_site;
步骤E62:按照s_output=s_output+flag+s_insert的计算公式获得s_output的最新数值;
完成操作后i=i+1;对于参数flag执行公式“flag=!Flag”,(即翻转flag的值,flag为0则将flag变为1,flag为1则将flag变为0);
然后,再判断Key是否完全遍历,判断结果为“是”则继续下一步;若判断结果为“否”则重复步骤E61和E62;
遍历完成后,获得最终字符串s_output;根据载体信息carrier的UTF-8格式编码,将s_output分段嵌入载体信息carrier之中,得到嵌入加密信息的加密文本EncryptText,输出加密文本EncryptText;
将加密文本EncryptText进行UTF-8反编码,得到反编码的加密文本EncryptText-R,并生成可传输二维码图像QR,再输出二维码图像QR和密钥Key。
所述将秘密信息secret“秘”插入载体信息carrier“信息隐藏”的过程包括如下步骤。
1)输入载体信息carrier和秘密信息secret;将载体信息carrier和秘密信息secret转换成UTF-8编码;载体信息carrier的UTF-8编码,即载体信息“信息隐藏”的字符串c_bit为“111001001011111110100001111001101000000110101111111010011001101010010000111010001001011110001111”;
2)将载体信息carrier输入至密钥生成流程得到密钥Key,同时嵌入嵌入容量capacity。
嵌入容量capacity是本算法的一个特征,在生成Key之后,根据Key计算容量并用于算法判断,不用嵌入Key中,因为嵌入容量capacity就是算法执行过程中根据Key计算出来的参数。嵌入容量capacity是采用将第一数组key_num1[]从第二位开始减1计算第二数组key_num2[]的方式,所述第二数组key_num2[]的所有各位的数值总和减1的结果得到嵌入容量capacity。
3)根据UTF-8编码规则,将秘密信息secret转化为二进制字符串s_bit;
秘密信息secret的汉字“秘”,转换成UTF-8编码是:['11100111','10100111','10011000']。由此可知,加密信息“秘”所对应的字符串,即加密信息字符串s_bit为“111001111010011110011000”。由是可知,加密信息字符串s_bit是长度为24位的二进制字符串。
4)判断嵌入容量capacity是否大于等于s_bit的长度;判断结果为“是”,则继续下一步操作;若判断结果为“否”程序结束,输出“容量不足”的结果;
由以上计算可知,嵌入容量capacity为35,加密信息字符串s_bit长度为24,嵌入容量capacity大于加密信息字符串s_bit长度,继续下一步操作。
5)提取密钥Key中第一位元素,记为flag;新建字符串s_output为空字符串,同时将起始截取位置site1置为0,并将起始截取位置site1作为新建字符串s_output的位置标记;(起始截取位置site作为一个可变的中间参数,只在算法流程中生成并使用,基于每个字节,范围为1到8。
密钥Key为[0,0,0,1,6,3,0,0,1,5,1,0,4,1,0,0,1,0,0,1,0,3,0,3,0,0,2,1,3],其第一位元素为0,参数flag的初值为0。
如图6,是将秘密信息secret的汉字“秘”插入载体信息carrier“信息隐藏”的示意图。
6)新建字符串s_output,是将秘密信息secret的字符串s_bit嵌入到载体信息carrier的最终密钥Key字符串后所获得的二进制字符串。新建字符串s_output包括了载体信息carrier和秘密信息secret。
然后,依次遍历密钥Key中第二个到最后一个元素,密钥Key的第二个元素遍历完成后记次数i=2;(该遍历过程包括步骤E61和步骤E62;
步骤E61:新建count=Key[i],新建字符串s_insert;字符串s_insert的具体值为截取s_bit[site,site+count]字符串。
步骤E62:按照s_output=s_output+flag+s_insert的计算公式获得s_output的最新数值;将site+1的计算结果赋值给count;将i+1获得的数值赋值给参数i,即i=i+1;对于参数flag执行公式“flag=!Flag”,即翻转flag的值,flag为0则将flag变为1,flag为1则将flag变为0;)
判断Key是否完全遍历,判断结果为“是”则继续下一步;若判断结果为“否”则重复步骤E6;
5)遍历完成后,获得最终字符串s_output;根据载体信息carrier的UTF-8格式编码,将s_output分段嵌入载体信息carrier之中,得到嵌入加密信息的加密文本EncryptText;所述加密的数据插入过程如图6所示,嵌入秘密信息的载体信息字符串s_output(非格式编码)为:0101111001101101011000111110100110010100100100001000010100001000;其中,加黑字体为插入的秘密信息,加粗且为斜体的,为秘密信息加入后尚且空余的位数,用0补齐。
6)输出加密文本EncryptText;将加密文本EncryptText进行UTF-8反编码,得到反编码的加密文本EncryptText-R,并生成可传输二维码图像QR,输出二维码图像QR和密钥Key。将嵌入秘密信息的载体信息非格式编码s_output还原成UTF-8编码s_output_UTF::[['11100101','10111001','10101101'],['11100110','10001111','10101001'],['11101001','10010010','10010000'],['11101000','10010100','10001000']]
所述解密算法包括如下步骤:
步骤D1:获得输出二维码图像QR和密钥Key,从中获得加密文本EncryptText;
步骤D2:将加密文本EncryptText进行UTF-8编码,提取非格式编码内容e_nsym;
步骤D3:根据密钥Key,从非格式编码内容e_nsym中获取秘密信息secret的二进制字符串s_bit,并根据s_bit还原秘密信息secret的原始信息。
所步骤D3之后,还包括从非格式编码内容e_nsym中去除秘密信息secret后,获取载体信息carrier的步骤。
所述解密算法为加密算法的逆过程,根据图3和图6,可非常容易地得出解密的过程。
如图3中,根据密钥Key,新建数组key_num_de[],其值为将Key[]删除第一位元素并将其余元素依次减一得到。依次遍历key_num_de[]及以后的数据,新建空字符串s_insert和c_redu(s_insert用于记录每次循环从加密文本的非格式二进制编码e_nsym中提取的二进制秘密信息,c_redu用于记录还原后的载体文本的非格式编码部分);(该遍历的过程包括如下几个步骤);
依次遍历key_num_de[],参数i记为遍历次数,参数count=key_num_de[i],参数site赋值为0,用于记录每次循环结束后,e_nsym剩余未被提取秘密信息的起始位置,
通过s_insert=s_insert+e_nsym[site,site+count],来提取加密文本EncryptText中嵌入的信息;通过c_redu=c_redu+e_nsym[site]*(count+1),将原载体信息还原(根据加密的原则,是将一段重复的字符串只保留其第一位,剩余的位置用来嵌入信息,还原载体信息则与之相反,根据密钥记录的重复字符的个数n(此参数n只做此段括号内的文本解释,与算法内无关),和此段字符的第一位字符,后续添加n-1为与第一位相同的字符,则是还原后的载体信息);
将获得的s_insert根据UTF-8编码规则转换为文本信息secret;
将参数c_redu根据密文EncryptText的UTF-8编码格式覆盖到原加密文本EncryptText的非格式编码中(和提取非格式编码过程相反),然后转换为文本信息carrier;
输出秘密信息secret和载体信息carrier。
本发明具有以下几个技术优点。
1、在信息隐藏领域中,除了对隐蔽性有很高的要求之外,信息隐藏的容量也是作为判断其算法的可靠性的一个标准。隐藏容量的大小基于载体信息的大小,对于正常的二值图像信息隐藏来说,一张二值图像最多能隐藏几位比特数据,但是对于此加密系统来说,借助于二维码的高容量特性,我们的隐藏率大概能达到40%左右。同样对于一段待加密的载体信息,我们可以传输的信息是其他算法的几倍,同时又能保证其隐蔽性。
2、本发明中,载体是特殊的二值图像——二维码。对于二维码来说,其本质是一串字符,以图像的形式表现出来。如果隐藏算法破坏了二维码的结构,导致无法被识别,就有很大的可能暴露其内部已隐藏信息。本发明在不改变其基本结构的情况下,将信息隐藏进去。现有的算法中将二维码转换成灰度图像,再利用二LSB或者DCT算法嵌入信息,最后再将灰度图像转换成二值图像,达到隐藏信息的目的。这样不仅改变了二维码的基本结构,导致其不能被识别,更使得载体隐蔽性大大降低。本发明中,在二维码生成之前,将载体信息进行处理,再生成可传输二维码图像,这样就避免了已嵌入信息二维码暴露的可能性,正常扫码软件只能看到不一样的信息,只有用专门的解码器才能解析其中载体信息以及秘密信息。
3、因为二维码本身的鲁棒性以及抗压缩性,我们较之于其他二值图像信息隐藏算法,有很高的鲁棒性以及抗压缩性。
4、加入的掩码算法,通过还原其可以很好的识别原二维码信息是否被篡改或者损坏,安全性高。
基于图像的信息隐藏,主要利用了人类的视觉感知特性,修改或替换部分图像数据(空域)或描述图像的参数(变换域),在数字化的图像中人眼无法感知的成分中嵌入秘密信息。图像的传输是如今网络传输的主要传输方式之一,而且图像中有较大的冗余空间,是信息隐藏的良好的载体。二值图像是每个像素只有两个可能值0或1的数字图像。正是因为这样,所以即使只是一小部分的像素值发生改变也可能会导致大幅度的失真。相比较灰度图像和彩色图像而言,二值图像能隐藏秘密信息的像素少之又少。本方案中所用的二值图像即二维码,而与一般的二值图像信息隐藏不同的是,二维码是一种很特殊的二值图像,本方案不对二维码本身进行一系列的处理。
文本信息较之于图像信息,在互联网中的传播范围更广。但是文本信息中,冗余空间非常之少,因此隐藏信息也非常难。文本信息是一种广泛的信息传递的载体,本身不存在冗余,并且数据与内容高度一致。文本信息中的一个bit发生变化文本就可能发生错误,因此在文本信息中进行信息隐藏难度较大。但,将信息隐藏到文本之后得到的密文比较不容易受到怀疑,安全性比较高。本方案中所提出的文本信息隐藏的方法,不对文本本身进行操作,而是将文本编码成二进制bit的形式,再对二进制bit进行具体的信息隐藏。
尽管文本信息隐藏在一定程度上大大增强了信息的安全性。然而,随着技术的飞速发展,相应的破解密文的手段也逐渐多起来。普通的文本信息隐藏也不一直如原来那样安全可靠。本发明中考虑到近年来在很多方面都有所应用,其自身结构的独特性也为其安全性提供了一定的保障,同样也得到了大众的青睐。这也是考虑使用二维码进行信息影藏的原因之一。二维码还具有很强的鲁棒性,最高可以到7%~30%面积破损仍可被读取,将其应用到隐藏中可以有效的提高秘密信息抵抗攻击的能力。本发明的方法与基于二值图像、基于文本的算法之间的比较。由表5可知,本发明的方法,在抗压缩、人眼识别性、信息安全性等方面,都有较好的特性。
日常生活中,目前应用最为广泛二维码的一种是QR码。从视觉上看,QR码是由多个黑白块组成的,这些黑白块在一块矩形区域内“随机排列”,人眼无法识别出任何的信息。实质上,QR码中黑白块的位置是按照一个矩阵形式排列的,每一个位置上的黑块或白块分别用来表示二进制中的0、1,以此来存储需要的信息。QR二维码图像由数据区和功能图像组成,其中数据区的内容记录了数据码、纠错码、QR码的格式信息和版本信息等,这一部分也就是二维码真正能够读取出来的信息内容;功能区包括了位置探测图形、定位图像、分隔符以及校正图形,这一部分的图形主要是为了用于标记二维码的矩形大小、确定二维码扫描时的位置,确保能够准确识别并提取出QR码中存储的信息。QR码的数据区内容各不相同,但每一个QR码的功能图形部分位置及图像都是基本确定的,它不会受到数据区中其他信息的影响。
为了安全,二维码数据区的黑白块是不能直接得出数据信息,数据区的图像经过掩码处理,使得其看似随机排列。QR码中就有规定的8种掩码图案,在生成二维码时,将数据区的黑白块图像与掩码图案的对应位置进行异或等运算操作,便可得到我们平常看到的杂乱无章的二维码图像了。由于二维码本身特殊的结构,其具有很多优良的属性:可以容纳上千个字节,包含的信息量大、密度高,同时,其编码范围非常广,可对文字、图片甚至声音等进行编码,其自身具备的纠错功能使得其具备更加良好的容错能力,可以防止普通的物理因素带来的破坏,而最重要的就是二维码可以引入加密机制,也就是可以将需要传递的信息先进行加密,然后再存储到二维码中,这样可以提高二维码的安全性、防伪造性。
QR码有40个版本,4个不同的纠错等级(LMQH),编码内容包含ASCII字符、数字、8位字节和中国以及日本汉字,还具有扩展解释能力。中文或者日文可编码1817个汉字以及7089个数字,4296个ASCII字符等。编码过程中,我们首先要对数据进行分析,确定纠错等级;进而根据我们需要编码的数据类型选择合适的编码模式进行编码;之后将编码得到的码字分块,与纠错等级结合产生纠错字,添加到码字序列的后面,这样根据一个规定的标准水平就可以确定数据字码的错误修正容量了;最后我们将最终的序列分块,与掩码运算,添加上版本信息、功能图案等部分,就完成了二维码的编码过程。不同种类的二维码适用的编码模式也有所不同,对于不同的数据类型,同种二维码的编码方式也可能不同。
游程编码是栅格数据压缩的重要编码方法,其基本思路是将一个相同值的连续串用其值和字符重复的个数来替代表示,从而使数据长度少于原始数据的长度。而在处理图像时,各行(或列)方向上排列的具有相同灰度值的连续像素块也可看成是这样的串,当像素块发生变化时依次记录灰度值以及相同像素块重复的个数,从而实现数据的压缩。简单来说,游程编码实际上是为了统计连续相同字符的个数,解码时则根据字符及连续相同字符的个数,恢复原来的数据。二维码图像是典型的二值图像,即所有的像素只有两种取值,我们将连续出现的黑色像素标记为黑色游程,连续出现的白色像素标记为白色游程,以此来减少实际的编码长度和冗余度。举个例子,假设我们用0代表黑块,1代表白块,现有一4*4的二值图像如图所示,表示原始数据0011111001100011,进过游程编码我们可得到压缩数据021502120312,与原始数据相比多出了4位的空位。这样一来,我们就可以用过压缩无用的明文数据,将我们想要传输的密文数据隐藏在二维码中进行传输了。
UTF-8(Unicode Transformation Format-8bit)是一种针对Unicode的可变长度字符编码,又称万国码。是用以解决国际上字符的一种多字节编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。这也是本文算法的实用基础,可以适用不同环境下的操作。UTF-8表示ASCII字符的UNICODE字符,将会编码成1个字节,并且UTF-8表示与ASCII字符表示是一样。所有其他的UNICODE字符转化成UTF-8将需要至少2个字节。UTF-8编码规则:如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的字节数,其余各字节均以10开头。因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去字符控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同。实际将UNICODE转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。因此那些基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。因此在隐藏信息时,为了不改变原有编码标准,需将信息的二进制位按照字节进行分类加密。提取不同字节可编码部分,进行加密操作。
对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化囊括在本发明内。不应将权利要求中的任何附图标记视为限制所涉及的权利要求。
此外,应当理解,虽然本说明书按照实施方式加以描述,但并非每个实施方式仅包含一个独立的技术方案,说明书的这种叙述方式仅仅是为清楚起见,本领域技术人员应当将说明书作为一个整体,各实施例中的技术方案也可以经适当组合,形成本领域技术人员可以理解的其他实施方式。
Claims (6)
1.一种基于游程编码的二维码信息隐藏方法,其特征是,输入载体信息carrier与秘密信息secret;先采用游程编码的方式,将载体信息carrier输入密钥生成流程并生成密钥Key;通过加密算法,将待加密的秘密信息secret嵌入载体信息carrier内获得加密文本EncryptText,然后由加密文本EncryptText生成二维码图像QR;发送方将上述二维码图像QR发送给接收方;接收方接到上述二维码图像QR后,通过解密算法进行解密获得载体信息carrier与秘密信息secret。
2.根据权利要求1所述的一种基于游程编码的二维码信息隐藏方法,其特征是,所述密钥生成流程包括如下步骤:
步骤SK1:获取载体信息carrier;
步骤SK2:将载体信息carrier根据UTF-8编码规则,转换为二进制字符串c_bit;
步骤SK3:对于二进制字符串c_bit,将其中的每8位bit作为一个字节byte,得到多个字节byte;将多个字节byte,依次对每个字节byte遍历;根据UTF-8编码规则,判断每个字节byte的头部格式编码长度,并得到每个字节byte的起始截取位置site;
步骤SK4:对于多个字节byte的每一个字节byte,截取该字节byte中的起始截取位置site之后的字符串;
步骤SK5:将多个字节byte的每个byte截取后的多个字符串,依次按照顺序排列后合成一个字符串c_new_bit;
步骤SK6:新建第一数组key_num1[],所述第一数组key_num1[]的第一位元素为c_new_bit的第一位元素;
步骤SK7:对于字符串c_new_bit,按照每个bit依次遍历c_new_bit,记录与上一个bit的数字相同的个数count,获得第一数组key_num1[];
步骤SK8:将所述的第一数组key_num1[]作为密钥Key。
3.根据权利要求2所述的一种基于游程编码的二维码信息隐藏方法,其特征是,输入的信息为载体信息carrier、秘密信息secret;所述加密算法包括如下步骤:
步骤E1:输入载体信息carrier,秘密信息secret;
步骤E2:将载体信息carrier输入至密钥生成流程得到密钥Key,同时嵌入参数容量capacity;
步骤E3:根据UTF-8编码规则,将秘密信息secret转化为二进制字符串s_bit;
步骤E4:判断capacity是否大于等于s_bit的长度;判断结果为“是”,则继续下一步操作;若判断结果为“否”程序结束,输出“容量不足”的结果;
步骤E5:保留密钥Key的第一位;从密钥Key的第二位开始,对于每一位都要先判断该位的原始值是0还是1,并将这个原始值保留;
步骤E6:然后根据每一位的数字,判断密钥Key的这一位能够插入的二进制数字的位数,并将二进制字符串s_bit由前至后依次插入;
步骤E7:遍历密钥Key后,根据载体信息carrier的UTF-8格式编码,将二进制字符串s_bit分段嵌入载体信息carrier之中,得到嵌入加密信息的加密文本EncryptText;
步骤E8:输出加密文本EncryptText,并根据加密文本EncryptText生成可传输二维码图像QR;
步骤E9:输出二维码图像QR和密钥Key。
4.根据权利要求3所述的一种基于游程编码的二维码信息隐藏方法,其特征是,所述步骤E6中,判断密钥Key的这一位能够插入的二进制数字的位数,由密钥Key的这一位数字减一计算而得出。
5.根据权利要求3所述的一种基于游程编码的二维码信息隐藏方法,其特征是,所述解密算法包括如下步骤:
步骤D1:获得输出二维码图像QR和密钥Key,从中获得加密文本EncryptText;
步骤D2:将加密文本EncryptText进行UTF-8编码,提取非格式编码内容e_nsym;
步骤D3:根据密钥Key,从非格式编码内容e_nsym中获取秘密信息secret的二进制字符串s_bit,并根据s_bit还原秘密信息secret的原始信息。
6.根据权利要求5所述的一种基于游程编码的二维码信息隐藏方法,其特征是,所步骤D3之后,还包括从非格式编码内容e_nsym中去除秘密信息secret后,获取载体信息carrier的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811634488.8A CN109657769B (zh) | 2018-12-29 | 2018-12-29 | 一种基于游程编码的二维码信息隐藏方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811634488.8A CN109657769B (zh) | 2018-12-29 | 2018-12-29 | 一种基于游程编码的二维码信息隐藏方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109657769A true CN109657769A (zh) | 2019-04-19 |
CN109657769B CN109657769B (zh) | 2021-11-19 |
Family
ID=66118284
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811634488.8A Active CN109657769B (zh) | 2018-12-29 | 2018-12-29 | 一种基于游程编码的二维码信息隐藏方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109657769B (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110324349A (zh) * | 2019-07-08 | 2019-10-11 | 喻汝成 | 一种区块链大数据安全处理系统及方法 |
CN111640053A (zh) * | 2020-06-02 | 2020-09-08 | 长江师范学院 | 一种基于同态加密算法高嵌入量的可逆信息隐藏方法 |
CN112926087A (zh) * | 2021-03-09 | 2021-06-08 | 南京信息工程大学 | 基于二维码具有验证功能与高嵌入容量的秘密共享方法 |
CN113011543A (zh) * | 2021-03-10 | 2021-06-22 | 南京信息职业技术学院 | 行程码生成方法、读取方法、验证方法及移动终端和学校报到管理系统 |
WO2022027243A1 (zh) * | 2020-08-04 | 2022-02-10 | 深圳市创必得科技有限公司 | 3d模型文件的编码方法、解码方法、装置及3d打印机 |
CN114580001A (zh) * | 2022-03-11 | 2022-06-03 | 合肥工业大学 | 一种用于excel文件的加密解密算法及文件保护方法 |
CN115358911A (zh) * | 2022-10-20 | 2022-11-18 | 北京万里红科技有限公司 | 屏幕水印的生成方法、装置、设备和计算机可读存储介质 |
CN116303374A (zh) * | 2023-05-22 | 2023-06-23 | 深圳市维度数据科技股份有限公司 | 基于sql数据库的多维度报表数据优化压缩方法 |
CN116776909A (zh) * | 2023-08-28 | 2023-09-19 | 四川星点网络技术有限公司 | 一种瓶盖二维码溯源系统 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130339252A1 (en) * | 2008-05-02 | 2013-12-19 | Matthew J. Pauker | Format-preserving cryptographic systems |
CN104504342A (zh) * | 2014-12-04 | 2015-04-08 | 中国科学院信息工程研究所 | 基于Unicode编码利用不可见字符隐藏信息的方法 |
CN105391514A (zh) * | 2014-09-05 | 2016-03-09 | 北京奇虎科技有限公司 | 字符编码解码方法及装置 |
CN106650869A (zh) * | 2016-10-18 | 2017-05-10 | 重庆文理学院 | 一种基于二维码的信息隐藏方法 |
CN106815544A (zh) * | 2017-01-16 | 2017-06-09 | 武汉大学 | 一种基于二维码的信息隐藏方法 |
-
2018
- 2018-12-29 CN CN201811634488.8A patent/CN109657769B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130339252A1 (en) * | 2008-05-02 | 2013-12-19 | Matthew J. Pauker | Format-preserving cryptographic systems |
CN105391514A (zh) * | 2014-09-05 | 2016-03-09 | 北京奇虎科技有限公司 | 字符编码解码方法及装置 |
CN104504342A (zh) * | 2014-12-04 | 2015-04-08 | 中国科学院信息工程研究所 | 基于Unicode编码利用不可见字符隐藏信息的方法 |
CN106650869A (zh) * | 2016-10-18 | 2017-05-10 | 重庆文理学院 | 一种基于二维码的信息隐藏方法 |
CN106815544A (zh) * | 2017-01-16 | 2017-06-09 | 武汉大学 | 一种基于二维码的信息隐藏方法 |
Non-Patent Citations (2)
Title |
---|
GILSANG YOO等: "Data hiding technique for digital images tracing system on the Web", 《2012 6TH INTERNATIONAL CONFERENCE ON NEW TRENDS IN INFORMATION SCIENCE, SERVICE SCIENCE AND DATA MINING (ISSDM2012)》 * |
杨全周: "一种基于游程编码的二值图像隐藏方案", 《舰船电子对抗》 * |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110324349B (zh) * | 2019-07-08 | 2020-11-24 | 天聚地合(苏州)数据股份有限公司 | 一种区块链大数据安全处理系统 |
CN110324349A (zh) * | 2019-07-08 | 2019-10-11 | 喻汝成 | 一种区块链大数据安全处理系统及方法 |
CN111640053B (zh) * | 2020-06-02 | 2023-04-18 | 长江师范学院 | 一种基于同态加密算法高嵌入量的可逆信息隐藏方法 |
CN111640053A (zh) * | 2020-06-02 | 2020-09-08 | 长江师范学院 | 一种基于同态加密算法高嵌入量的可逆信息隐藏方法 |
WO2022027243A1 (zh) * | 2020-08-04 | 2022-02-10 | 深圳市创必得科技有限公司 | 3d模型文件的编码方法、解码方法、装置及3d打印机 |
CN112926087A (zh) * | 2021-03-09 | 2021-06-08 | 南京信息工程大学 | 基于二维码具有验证功能与高嵌入容量的秘密共享方法 |
CN112926087B (zh) * | 2021-03-09 | 2023-05-05 | 南京信息工程大学 | 基于二维码具有验证功能与高嵌入容量的秘密共享方法 |
CN113011543A (zh) * | 2021-03-10 | 2021-06-22 | 南京信息职业技术学院 | 行程码生成方法、读取方法、验证方法及移动终端和学校报到管理系统 |
CN113011543B (zh) * | 2021-03-10 | 2021-10-29 | 南京信息职业技术学院 | 行程码生成方法、读取方法、验证方法及移动终端和学校报到管理系统 |
CN114580001B (zh) * | 2022-03-11 | 2022-09-06 | 合肥工业大学 | 一种用于excel文件的加密解密算法及文件保护方法 |
CN114580001A (zh) * | 2022-03-11 | 2022-06-03 | 合肥工业大学 | 一种用于excel文件的加密解密算法及文件保护方法 |
CN115358911A (zh) * | 2022-10-20 | 2022-11-18 | 北京万里红科技有限公司 | 屏幕水印的生成方法、装置、设备和计算机可读存储介质 |
CN116303374A (zh) * | 2023-05-22 | 2023-06-23 | 深圳市维度数据科技股份有限公司 | 基于sql数据库的多维度报表数据优化压缩方法 |
CN116303374B (zh) * | 2023-05-22 | 2023-08-29 | 深圳市维度数据科技股份有限公司 | 基于sql数据库的多维度报表数据优化压缩方法 |
CN116776909A (zh) * | 2023-08-28 | 2023-09-19 | 四川星点网络技术有限公司 | 一种瓶盖二维码溯源系统 |
CN116776909B (zh) * | 2023-08-28 | 2023-11-03 | 四川星点网络技术有限公司 | 一种瓶盖二维码溯源系统 |
Also Published As
Publication number | Publication date |
---|---|
CN109657769B (zh) | 2021-11-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109657769A (zh) | 一种基于游程编码的二维码信息隐藏方法 | |
CN106815544B (zh) | 一种基于二维码的信息隐藏方法 | |
EP3065088B1 (en) | 2d-code generation method, 2d-code generation device, 2d-code reading method, 2d-code reading device, 2d code, and program | |
Swathi et al. | Video steganography by LSB substitution using different polynomial equations | |
CN100377173C (zh) | 一种基于十六进制编码的构建二维码的方法 | |
CN107578452B (zh) | 一种具有兼容格式和不变尺寸的jpeg图像加密方法 | |
CN100550653C (zh) | 一种可变长度结构化信息的编码和解码方法 | |
CN110475038B (zh) | 一种结合最小闭包编码的字符画生成式隐藏及恢复方法 | |
CN111464717B (zh) | 利用直方图平移的具有对比度拉升的可逆信息隐藏方法 | |
CN112016061A (zh) | 一种基于鲁棒水印技术的Excel文档数据保护方法 | |
CN108418683A (zh) | 一种基于汉字结构特征的无载体文本隐写方法 | |
CN103702133A (zh) | 一种图像压缩展示方法及其装置 | |
Malik et al. | A high capacity text steganography scheme based on huffman compression and color coding | |
CN116362953B (zh) | 基于不可见字符的高精地图水印方法 | |
CN115297218B (zh) | 基于哈夫曼编码规则和位置图压缩的可逆数据隐藏方法 | |
Nithyanandam et al. | An image steganography for colour images using lossless compression technique | |
Wu et al. | Zero-error watermarking on jpeg images by shuffling Huffman tree nodes | |
CN114817873A (zh) | 基于形变的水印生成、读取方法及装置 | |
CN113744112A (zh) | 一种基于载体随机性的对称信息隐藏方法 | |
CN104424617B (zh) | 一种处理图像的方法和装置 | |
CN113378186A (zh) | 一种基于编码的图像加密隐藏信息的方法及装置 | |
Sultana et al. | An Edge Detection Based Reversible Data Hiding Scheme | |
Zhou et al. | A QR data hiding method based on redundant region and BCH | |
Lee et al. | Lossless text steganography in compression coding | |
Alshayeji et al. | A high‐capacity and secure least significant bit embedding approach based on word and letter frequencies |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |