文献标识码: A
文章编号: 0258-7998(2012)04-0117-03
随着现代社会的发展,在日常生活及工业生产中需要传输的数据信息量越来越大,常用的一维条码技术已经不能满足人们要求,二维条码技术得到了快速发展,获得了社会的普遍认同。智能手机作为便携设备应用广泛,尤其它具有内置摄像头可以直接获取图像数据,使得二维条码的识别变得更加快捷高效。
QR码是目前应用较为广泛的一种矩阵式二维码,考虑到工业物料管理系统对加密性的特殊要求,本文采用RC4算法对QR码进行加密处理,并在android系统下设计实现。
1 加密QR码生成
RC4加密算法是Ron Rivest在1987年设计的密钥长度可变的流加密算法簇[1]。 该算法的速度可以达到DES加密的10倍左右,且具有很高级别的非线性,适合手机硬件系统的要求;RC4算法属于流加密,被广泛应用于SSL/TLS等网络安全协议[2-3]。随着手机互联网的发展,使用RC4算法便于手机二维码识别系统后续网络化发展。
1.1 RC4算法
RC4算法包括密钥调度算法(KSA)和伪随机子密码生成算法(PRGA)两大部分。具体步骤如下:
(1)密钥调度算法(KSA)。定义一个长度为256 B的S盒,同时建立一个临时矢量K。如果密钥Key的长度≥256 B,则将Key赋给K,多余字节丢弃;否则,计算Key的长度len,将Key的值赋给K的前len个元素,并循环重复用Key的值赋给K剩下的元素,直到K的所有元素都被置换赋值。
(2)伪随机子密码生成算法(PRGA)。将S盒中的每个字节与另一个字节置换,直到最后S[255]置换完成,操作继续重复。加密时,将子序列密钥与要加密的明文进行“异或”得到密文。解密时过程相同。
1.2 RC4算法的混沌改进
1.2.1 RC4算法混沌改进
为了提高流密码的遍历性与随机性,在RC4算法的密钥生成与伪随机子密码生成过程中采用混沌算法进行改进。Logistic一维映射是一种比较简单的数学形式混沌映射,但是具有非常好的混沌性质,适合手机对算法处理速度快的要求。
Logistic映射数学表达式为:
2 加密QR码识别
QR码识别系统在Android手机系统下实现。
2.1 Android系统简介
Android是基于Linux开放性内核的操作系统,是Google公司在2007年11月5日公布的手机操作系统[5]。Android应用程序使用Java做为开发语言。本系统的开发环境为eclipse-SDK-3.5.2+android-sdk_r10+ADT-0.9.7。
2.2 QR码识别系统的主要模块
系统主要分为图像采集、图像处理、QR码的译码及数据解密4个模块。
图像采集:点击按钮启动程序同时启动手机的摄像头,开始实时捕捉QR码图像,如果检测到QR码,就将这一帧的图像捕捉并进行图像处理。
图像处理:(1)灰度化,手机获取的彩色图像变为黑白图像,减少信息量,加快处理速度;(2)中值滤波,使用适当的矩形窗口中值滤波处理掉光学采集系统中产生的椒盐噪声;(3)二值化,采用直方图双峰方式进行图像分割,将整个图像呈现出明显的、只有黑白的视觉效果。
QR码译码:按照国家GB/ T 18284 2000标准[6]进行解码。
数据解密:按照混沌改进RC4算法的步骤对数据码字进行解密。
2.3 多线程处理
在图像预处理及QR解码过程中,往往需要处理大量的数据的情况。为了提高识别速度,解码编程时采用多线程处理。
Android系统支持多线程应用,支持利用handler接收子线程的数据。多线程处理实现方法:为每个处理步骤开启一个线程,并在实现其run方法同时需要创建一个message,并定义好其属性;在完成操作后将数据发送给handler,通过handler发送message来达到多线程的调度,避免多线程操作时遇到资源冲突而发生异常。
3 系统性能分析
由于采用了混沌改进的RC4算法对物料数据的QR码进行了加密,在识别程序设计中采用多线程处理等编程技巧,从而使该物料数据QR码生成及识别系统的加密效果和识别速度达到较高要求。
频率测试和游程测试出的P-Value值都大于NIST(美国国家标准与技术委员会)规定的0.01,即符合理想随机序列标准。
3.2 系统识别速度
QR码识别系统在摩托罗拉开发的里程碑、里程碑2、ME525及HTC开发的G7手机上进行测试,测试手机的像素一般为500万,测试图片的大小为200×200。在73张图片中有4张污损图片不能译码,其余测试结果良好。
图3是本系统在ME525手机上运行时,对图1(b)所示加密QR码进行解码的操作,其中图3(a)为打开应用时的显示界面,由此输入密码。图3(b)为解码后结果,其中第一行为没有进行解密的译码结果,图中显示为一行乱码,不能得到QR码中的准确信息;第二行解密译码结果可以清楚看到厂家物料信息。图3(b)最下面显示一次识别的识别时间,识别时间是从打开摄像头捕获图像后开始计算,正常情况下本系统识别二维码图像的时间为1 400 ms~4 700 ms。
另外,识别速度还与光线、对焦时间有关。测试时光线不充足或过于充足都会影响识别时间。若图片距离手机过近则影响对焦时间,从而导致识别速度过慢。
Android手机系统功能丰富,携带方便,受周边环境影响较小。使用智能手机识别二维码已经成为条码识别的一个趋势,而且可扩展性强,可显著提高工业管理生产效率。经过测试及分析,本系统符合QR码加密性能、识别的时间和准确度要求。
参考文献
[1] 宋维平.流密码与RC4算法[J].吉林师范大学学报(自然科学版),2005(5):71-72.
[2] PETER K, MANUEL L, MARTIN M. QR code security[C]. MoMM2010-8th International Conference on Advances in Mobile Computing and Multimedia, 2010.
[3] HONGGEUN K, JUNGKYU H,SEONGJE C. An efficient implementation of RC4 cipher for encrypting multimedia files on mobile devices[C]. Proceedings of the ACM Symposium on Applied Computing, 2007.
[4] 金海荣. 混沌序列密码分析及其应用研究[D],哈尔滨:黑龙江大学, 2009.
[5] 谷歌公司. Android开发手册[EB/OL](2010-09-23).http://developer.android.com.
[6] 国家质量技术监督局.中华人民共和国国家标准——快速响应矩阵码[S].北京:标准出版社,2001.
[7] ANDREW R, JUAN S, JAMES N. A statistical test suite for random and pseudorandom number generators for cryptographic applications[S].NIST Special Publication, 2001.