APP下载

AES算法在QR二维码生成识别中的应用

2019-10-21李震

现代信息科技 2019年21期
关键词:信息安全

摘  要:QR二维码因成本低、存储容量大、存储范围广等特点,已经是世界上应用最广泛的二维码之一。本文探讨了基于AES算法对QR二维码进行加密、解密的设计,并使用Java语言对这一设计进行了实现,以增强QR二维码在流通、传播过程中的安全性。

关键词:信息安全;AES加密算法;QR二维码;Java

中图分类号:TP391.44;TP309      文献标识码:A 文章编号:2096-4706(2019)21-0144-03

Abstract:QR two-dimensional code is one of the most widely used two-dimensional codes in the world because of its low cost,large storage capacity and wide storage range. This paper discusses the design of encrypting and decrypting QR two-dimensional codes based on AES algorithm,and implements the design in Java language to enhance the security of QR two-dimensional codes in the process of circulation and transmission.

Keywords:information security;AES encryption algorithm;QR two-dimensional code;Java

1  概述

随着我国移动互联网技术的快速发展,以QR码为代表的二维码信息存储、传输和识别技术以其无可替代的高效性、灵活性及低成本等特点,在移动支付、信息共享等日常生活的中迅速普及。然而,利用二维码传播计算机木马、病毒,以及盗窃用户个人信息,导致隐私泄露等问题也屡见不鲜。可以看到,在很多领域中,二维码信息安全都是一个不可忽视、也无法回避的问题,二维码的安全和保密问题也越来越有研究价值[1]。本文探讨了一种通过利用AES加密算法对QR二维码进行加密的方式来提高二维码信息安全的方法。

2  QR码简介

QR码(Quick Response Code)是由日本DENSO WAVE公司于1994年推出的一种矩阵二维码编码方式,也是目前世界上使用最广泛的二维码编码方式之一。QR码不仅具有存储信息量大、成本低、误码率低等一些二维码的共通特点,还具有全方位快速识别,可以对包括汉字在内的各种文字、图形、图像等几乎所有数字媒体进行编码等优点。根据ISO标准规定,QR码由包含位置探测图形、分隔符、定位图形、校正图形的功能区和包含格式信息、版本信息、数据和纠错码在内的编码区两部分组成。功能图形区负责定位图像、识别特定图像等,不含有数据信息;编码区主要用于保存数据信息和版本、格式信息,也提供纠错功能[2]。QR码版本7的符号结构示意图如图1所示[3]。

如图1所示,QR码的控制信息中本身并没有对数据信息进行加密,且由于QR码编码解码的算法本身是公开的,其所携带的信息如果被无关的组织、机构或是个人随意读取,很容易造成不必要的信息泄露、隐私曝光。在以QR码为媒介进行敏感信息传递时,需要有一种简单、快速、有效的加密手段。

3  AES算法原理

作为DES算法的升级替代,AES算法(Advanced En-cryption Standard)自2000年正式公布以来,其安全、可靠、简单、快速的特性已被多方分析研究检证。作为当前最为常见的对称加密算法之一,在全世界范围内有着广泛的应用。AES算法加密的数据块和密钥长度相同,分为16字节、24字节和32字节三种。密钥越长,其加密的轮次越多,安全性也越强。下面以16字节密钥为例,对AES算法原理进行简单说明[4]。

AES算法在加密时的输入包括同为16字节的明文和密钥,输出为16字节的密文。明文和密钥都可以被看作是一个4*4的字节矩阵。算法包括密钥扩展(KeyExpansion)、轮密钥加(AddRoundKey)、字节替换(SubBYtes)、行移位(ShiftRows)、列混淆(MixColumns)等步骤。

(1)密钥扩展:通过一个混合操作将初始密钥扩展成多个16字节的轮密钥,供后面的轮加密使用;

(2)轮密钥加:当前状态与轮密钥進行按位XOR异或运算;

(3)字节替换:利用一个S盒完成一个状态到下一状态中字节的一一映射;

(4)行移位:将状态中的每行分别向左偏移0,1,2,3个字节;

(5)列混淆:将状态中的每列独立操作,与一个固定的多项式进行模乘,使每列中的每个字节都被映射为一个新的值。

加密的过程如图2所示。输入的密钥经过密钥扩展,与明文做第一次轮密钥加。之后按照字节替代、行移位、列混淆、轮密钥加的顺序完成一轮的加密,加密的中间结果称为状态(State)。中间状态和相对应轮的轮密钥继续进行重复的多轮次变换(16字节密钥为10轮,其中最终轮不需要列混淆),最终达到高强度的加密效果,输出最终的密文。

解密过程输入16字节密文,使用与加密过程中相同的密钥,运算过程与加密相反,如图2所示,其中使用的S盒的字节替代、线性变换的行移位和列混淆均为原运算方式的逆向运算。同样地,对应着加密的最终轮,最先进行的解密轮次也不需要进行逆向列混淆。经过总共10轮的变换,输出16字节明文,达到解密的目的。

4  应用AES算法对QR二维码加密解密

基本思路是在QR二维码编码前,应用AES算法对原始数据进行加密。再对密文进行QR码编码,这样即使该QR二维码在传播过程中被不相干的组织或者个人获取,也无法破译。需要获取该二维码信息时,在读取QR码前,输入与加密时相同的密钥,即可获取到原始的信息。

限于篇幅,本文只展示加密过程实现的主要代码。

4.1  加密过程的实现

(1)手动输入的密钥安全性低,且长度不容易控制,这里选择通过KeyGenerator类生成128位的随机源,再转换成AES算法可用的原始对称密钥的方式来创建密钥,并对该密钥进行保存,以备解密使用。

KeyGenerator keyGenerator;// 生成key

keyGenerator = KeyGenerator.getInstance("AES");

keyGenerator.init(128);//生成一个128位的随机源

SecretKey secretKey = keyGenerator.generateKey();

byte[] keyBytes = secretKey.getEncoded();//产生原始对称密钥

Key key = new SecretKeySpec(keyBytes, "AES");

(2)以字节数组形式获取待加密的明文数据,并对明文数据进行AES算法加密。

Stingcontext = "测试内容";//待加密明文

Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");

cipher.init(cipher.ENCRYPT_MODE,key);//指定加密模式,输入密钥

byte[] resultAes = cipher.doFinal(context.getBytes());

(3)得到的密文通过ZXing类库提供的编码模块进行QR二维码编码,并将结果以png格式写入指定的文件中保存。

Hashtable hintsAes = new Hashtable();//创建QR编码参数的哈希表

hintsAes.put(EncodeHintType.CHARACTER_SET, "utf-8");

BitMatrix bitMatrixAes = new MultiFormatWriter ().encode(new String(resultAes), BarcodeFormat.QR_CODE, 300, 300, hintsAes);//输入密文,执行QR码编码

File outputFileAes = new File("d:" + File.separator + "QRPictureAes.png");

QRUtil.writeToFile(bitMatrixAes, "png", output FileAes);

4.2  解密过程

(1)通过移動设备摄像、外部图片导入等方式,将保存的图片以比特流的形式读入系统;

(2)利用ZXing类库提供的解码模块,对读入的QR二维码进行解码,得到AES算法加密后的密文;

(3)输入与加密时相同的16字节密钥,对密文形式的QR二维码利用AES算法进行解密,得到最终的明文结果。

根据图3和图4的对比可以看出,虽然同样使用的是QR二维码编码,但是经过AES加密可形成完全不同的图形编码。对图4经过AES算法加密后的QR码进行识别,其结果如图5所示,读取到加密后的密文在不知道密钥的前提下几乎无法破译。用相应的密钥对图4中加密后的QR码进行解密,解密后的识别结果如图6所示,利用正确密钥对经过AES算法加密的QR码解密,则可以快速地还原出原始的数据。

5  结  论

本文对QR二维码与AES算法的基本原理进行了归纳总结,并提出了在QR二维码编码前,生成随机密钥对原始数据使用AES算法加密的方法,将QR二维码生成识别与AES加密算法两种技术合理有效地结合起来,是对二维码存储、传播、识别过程中存在的信息安全问题的一种快速、简单的解决方案,并且利用Java语言对该方案进行实现,为进一步深入研究实现更加灵活高效的QR二维码信息安全提供了思路,具有一定的研究价值和较强的实用性。

参考文献:

[1] 单利安.QR二维码水印加密及解密算法研究 [J].无线互联科技,2013(10):122-123.

[2] 李逢玲,郑飞.RSA加密算法在QR二维码上的应用探讨 [J].中小企业管理与科技(上旬刊),2014(11):207-208.

[3] 张定会,单俊涛,江平.QR码DES加密与解密 [J].数据通信,2011(3):40-42.

[4] 陈彦龙,杨立波.AES算法的研究与实现 [J].中国科教创新导刊,2012(28):34+36.

作者简介:李震(1985-),男,汉族,湖南隆回人,专职教师,助教,硕士研究生,研究方向:信息系统开发、软件工程。

猜你喜欢

信息安全
信息安全不止单纯的技术问题
基于模糊综合评价法的信息安全风险评估模型
基于模糊综合评价法的信息安全风险评估模型
2014第十五届中国信息安全大会奖项
信息安全管理