本文研究的内容如下:
(1) 对系统进行需求和可行性分析;
(2)检验信源数据的格式规范,基于DES加密算法,利用密钥对其进行加密; (3)二维码识别软件的设计与运行试验;
(4)分析系统实现与设计的优点与缺点,查漏补缺,完善系统; (5)分析开发工具的功能,实现设计的目标。
2 开发相关技术介绍
2.1 Android平台介绍
Android平台是由Google和几十个手机公司在内的开发行厂商联盟组织Open Handsets Alliance开发设计出来的,它的目标是以较低的设备研发成本等,开发出一种具有优良用户界面的程序。
出现已有十几年历史的Symbian系统渐行渐远,而Windows mobile如今也鲜为人知,未来手机的操作系统需要一个稳定的物理层来支持,更需要互动型、灵活的设计环境。由于设计理念的不同,相比于iPhone是由厂家设计、工程师来实现的特点,Android的开源性本质使得其具有了很多iPhone不具有的优势。
在Android上发布应用程序不需要任何的许可;而Android平台也并没有任何隐藏与权限的设定,API对所有人都是透明的;这也意味着所有人都可以自由修改、完善Android的系统组件。
Android系统是一种基于Linux操作系统的灵活的、开放源代码的操作系统。Android系统的系统架构类型是分层架构,分为应用程序层、应用程序框架层、系统运行库层和Linux内核层。Android系统的基础为四大组件,分别是Activity、Service服务、Content Provider
【2】
内容提供者以及Broadcast Receiver广播接收器。而随着Android系统的不断发展,可以
运用Java等多种编程语言开发Android系统。Android系统架构如图1所示。 Application Application Framework Librarics Linux Kernel 图 1 Android系统架构图
Android Runtime 2.2 开发环境的搭建
2.2.1 先期环境搭建 (1)Android开发环境搭建
首先安装Java开发环境,安装文件jre-8u40-windows-x64.exe,下载并解压adt-bundle-windows-x86_64.rar文件,打开
adt-bundle-windows-x86_64\\eclipse\\eclipse.exe,环境搭建完毕。
- 4 -
(2)Java开发环境
下载并解压eclipse-SDK-win32.rar文件,打开Eclipse软件。 (3)导入Zxing二维码的源码
导入系统,打开源码中的Android项目,将core.jar文件加入项目。 2.2.2 Eclipse开发平台介绍
本设计中二维码的识别是通过32位windows操作系统上Eclipse开发平台搭建开发环境,运用Java语言对二维码的扫描功能进行设计开发,进而在PC上开发出二维码扫描识别的Java程序来进行二维码的识别。Eclipse IDE安装的ADT插件为我进行Java程序的设计与系统的开发搭建了良好的平台。
Eclipse是一个附带了标准的插件集的一个框架与一组服务。插件集中则包了JDK(即含Java开发工具)。 2.2.3 Base64编码方式
在本次的设计过程中,发现对密文进行编码后,会出现乱码的情况,推测是编码方法的原因。试用unicode、Base64等多种编码方法后,发现采用Base64编码方法对密文进行编码后不会出现乱码。Base64是一种基于64个可打印字符来表示二进制数据的表示方法,是网络上最常见的一种用于传输8Bit字节代码的编码方式。
2.3 二维码的介绍
二维码是在条码技术的基础上发展而来的,是在一维码难以满足用户电子识别需求的环境下产生的。由于一维码信息容量较低,其往往只能实现对物品的标识,而二维码则不然,相对于一维码信息容量低、数据库依赖性较大、安全性不高的不足,通过逐步的发展完善,二维码具有了高密度、信息量容量大、编码范围广、安全性高、读取率高、具有纠错功能、保密性、防伪性好、成本低、易制作等优点。同时二维码还能够对信息的整体进行容错识别,也能对图形的旋转变化进行矫正处理。由于二维码能够在横向和纵向两个维度上进行信息的存储与表达,因而能够以手机摄像框所包含的小区域来表达大量的信息,实现其高容量的信息容纳功能。 2.3.1 二维码的原理
二维码是用特定的几何图形按一定规律在二维方向上分布的黑白相间的矩形方阵记录数据符号信息的新一代条码技术,它是由一个二维码矩阵图形和二维码号组成,有些还包含说
【3】明文字。二维码是通过摄像头等图像采集设备进行输入,进而对信息进行自动处理。
2.3.2 二维码的分类
二维码通常分为堆叠式和矩阵式二种类型。
(1)堆叠式二维码又称为行排式二维码,其编码的原理是在一维码的基础上,将多行截短的一维码按需要堆叠成二行或多行。主要有PDF417、CODE49、CODE 16K几类。
(2)矩阵式二维码又称为棋盘式二维码。其编码的原理是在一个矩形空间里通过黑、白像素
【4】在矩阵中的不同分布进行编码。在矩阵相应元素位置上,用点的出现表示二进制“1”,点
- 5 -
的不出现表示二进制的“0”,点的排列方式表示二维码的内容。主要有:QR Code 、Data Matrix、Maxi Code、Code One几类。 2.3.3 QR码的介绍
QR码是在1994年的时候由日本的Denso公司研究发明的一种矩阵式二维码。在各类二维码中,QR码的运用范围与频率最广。 (1)QR码的简介
QR码又称为快速响应矩阵,就是人们常说的快速响应码,全文是Quick Response Code。QR码结构图如图2所示。
空白区 位置探测图形 位置探测图形 分 隔符 定位图形 校正图形 功能 图形 符号 格式信息 版本信息 编码区 格式 数据和纠错码字 图2 QR码结构图 (2)QR码的结构与特性
QR码除具有信息容量大、可靠性高等一般条码所具有共性特点外,还具有能够在二维(横向与纵向)上存有信息、识读速度快、数据密度大、占用空间小的主要特点。
相比于一般的条码只能单方向包含有信息,QR 码能够在二维尺度上容纳信息,这也解释了为何QR 码包含的信息比一般性条码要多。
QR Code全称Quick Response Code,译为快速反应条码,这也直观地说明了QR码超高
【5】
速识读的特点。这也是它区别于一般二维码的主要特性。使用条码识读设备读取QR码的时
候,单位时间内(秒)能够读取并且识别包含3000个字符的QR码符号,而其他种类的二维码的读取识别速度则远远慢于QR码。
QR Code码还具有全方位识读的特点。识别QR码的过程中会将具有一定旋转角度的QR
- 6 -
码作旋转处理,它的信息读取则是通过QR码的位置探测图形来进行自动识别,用硬件来实现的,因此,信息识读过程所需时间很短。
因为日本的文字中大量存在着汉字,因此QR码在设计之初就已经实现了汉字的支持系统。QR码表示汉文是通过特定的数据压缩模式来实现的,而其他二维码表示汉字的形式是通过字节实现的,相比较而言,用QR码来表示汉字的效率更高。
2.4 DES加密算法介绍
DES全称Data Encryption Standard,即数据加密标准,是一种使用密钥加密的分组加密算法,属于对称加密算法。
DES加密算法的安全性源于它的密钥,因此在使用时密钥的强弱决定了所加密数据的安全性与保密性。 2.4.1 DES概况
DES算法是一种分组密码,是将明文分组后进行分别加密的一种算法。
DES加密算法入口参数包含Key、Data和Mode三种。Key是密钥,DES算法中加密与解密的密钥是一样的,唯一的区别是加密与解密所使用的子密钥的顺序相反;Data是要进行加密、解密处理的数据;而Mode则是DES的工作方式,即加密、解密。 2.4.2 初始置换
DES算法以64比特位为基本单位,把输入的64位的明文变为64位的密文输出出来,它使用64位的密钥。DES加密算法的置换规则是将按一定的规律将64位输入块进行一次线性变换,把输入的64位块按位重新组合,换位输出后,把输出的64位分为L0、R0两部分,每部分长32位,L0是输出的左32位,R0 是右32位。然后在密钥的控制下,经过了16次迭代运算。第一次置换的具体流程是:首先把输入的第58位数据换到第1位,然后把第50位数据换到第2位,...,依此类推,第64位是原来数组的第7位数据。 2.4.3 逆置换
DES解密是加密算法的逆置换,是经过16次的迭代加密运算后,将所得的L16、R16进行逆置换,得到的密文为输出端。
3 系统分析与设计
3.1 系统框架设计
二维码系统有两个模块:数据加密与二维码生成模块、二维码的扫描识别与数据解密模块。本设计中二维码的生成是通过在草料网实现的,而二维码的加密与识别则是在SDK、Eclipse等多种开放源代码的java开发平台上实现的。
在二维码的扫描识别过程中调用了手机的相机功能来扫描条形码,而摄像功能还运用了自动聚焦、错误容纳等模块。
而在二维码的识别过程初始,还运用了用户登录相关的DES加密算法等技术。
3.2 数据加密与二维码生成模块
- 7 -
3.2.1 数据加密模块 该部分设计的运行步骤如下:
(1)用户输入一段文本(本设计中定为字符串);
例如:本设计中输入字符串“admin/123456/192.168.1.1”。 (2)设置DES加密算法的置换规则;
(3)检测输入参数格式是否正确,错误直接返回空值(null); (4)将用户输入的密钥选择为加密的初始密钥; (5)执行加密操作,并且返回加密后的数据; 3.2.2 二维码生成模块
二维码的生成已经有很多成熟的应用,而自行制作成本较高,因此本设计借助现有的开源项目,直接使用在线的Zxing中相应的编码包。本设计中是将加密后的密文在草料网上转化为二维码。
3.3 二维码扫描识别与数据解密模块
调用Android的手机摄像头功能,进行对QR码图像数据的采集,获取摄像头数据并且将图像数据转化为计算机可以识别的位图像素数据,从而方便系统进行解码。
首先打开主类CaptureActivity,并启动CameraManager摄像头管理类采集图像,然后利用CaptureActivityHandle类对图形进行解码处理,接着利用DecodeHandle类对数据进行解码和传送,最后在handleDecode中得到并查看二维码中的原始数据。
而解码的真正入口是CaptureActivity的Handle里面的。
(1) 用户对二维码图片扫描后,将接收到处理模块发送的数据发送到解码模块; (2)根据加密使用的密钥,进行相应的解密; (3) 对所的信息进行纠错处理,然后显示内容。
4 系统的实现
4.1 系统的主要流程
将设计的应用BarCodeTest.apk在Android智能手机上进行安装,用户进行账号密码的登录,然后开启摄像头功能并进行图像采集,将图像显示在手机屏幕中间。用户将手机对准要扫描的二维码,然后开始识别。如果二维码识别成功并且所识别的二维码编码有效,则显示识别后的二维码信息;如果识别失败则发出提示音提醒用户并且选择重新扫描或者返回。
系统流程图如图3所示。
- 8 -