计算机-基于DES算法的二维码扫描的实现

更新时间:2024-05-31 20:30:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

基于DES算法的二维码扫描的实现

摘要:随着手机Android系统的普及和信息化水平的提高,手机二维码扫描功能在我国已经为人们广泛的认识和接受,人们的生活和工作中对于二维码的运用也越来越频繁。本文通过eclipse软件设计了一项依托于安卓手机系统之上,利用安卓手机的摄像功能和二维码编码与解码的原理,以及DES加密算法的相关知识,实现二维码生成、加密与识别、解密的系统。该项设计内容包括三块:二维码的生成、安卓系统二维码的扫描识别系统设计与数据的加密解密的实现。二维码的生成系统完成了从数据输入、加密到生成相应二维码的功能,识别系统完成对采集到的二维码符号进行译码、解密并还原出所携带信息的功能。 关键词:Android手机系统;二维码生成;二维码识别;DES加密解密 The QR Code scanning System Based on DES

Jiang Dongyang

Abstract:

As the universe of the Android mobile phone system and the

development of the informatization level, the using of the QR Code recognition’s function is more and more frequent. Through this thesis the Eclipse software designs a system which enables the QR Code generation and recognition system, on the basis of android camera, the principle of coding and handling code, and the relevant knowledge of DES. This design covers three parts: Android QR code encryption design, QR code identification system design, and mobile phone user login system design. Generating system from the function of the input data to generate the corresponding QR code, collected in recognition system to complete the QR code symbol decoding carried by deducing the function of information.

Key Words:Android mobile phone system; QR Code’s Recognition; DES

encryption and decryption

目 次

1.1 系统研究的目的和意义 .................................................. - 1 - 1.2 国内外研究情况及背景 .................................................. - 1 - 1.3 可行性研究 ............................................................ - 3 - 1.4 本文研究内容 .......................................................... - 3 - 2 开发相关技术介绍 ........................................................ - 4 - 2.1 ANDROID平台介绍 ........................................................ - 4 - 2.2 开发环境的搭建 ........................................................ - 4 - 2.3 二维码的介绍 .......................................................... - 5 - 2.4 DES加密算法介绍 ....................................................... - 7 - 3 系统分析与设计 .......................................................... - 7 - 3.1 系统框架设计 ........................................................... - 7 - 3.2 数据加密与二维码生成模块 ............................................... - 7 - 3.3 二维码扫描识别与数据解密模块 ........................................... - 8 - 4 系统的实现 .............................................................. - 8 - 4.1 系统的主要流程 ........................................................ - 8 - 4.2 数据加密与二维码生成模块的实现 ........................................ - 9 - 4.3 二维码扫描识别与数据解密模块的实现 ................................... - 11 - 4.4 ANDROID CAMERA的调用 ................................................... - 17 - 5 系统调试及测试 ......................................................... - 17 - 5.1 系统调试 ............................................................. - 17 - 5.2 系统测试 ............................................................. - 17 - 5.3 测试结果 ............................................................ - 18 - 5.4 测试阶段复审与评价 ................................................... - 18 - 结 论 .................................................................... - 19 - 参 考 文 献 ............................................................... - 20 - 致 谢 ....................................................... 错误!未定义书签。

1 绪论

1.1 系统研究的目的和意义

随着智能手机的普及和信息化水平的提高,在面对一维码信息容量低、数据库依赖程度深的背景下,二维码以其高容量性、高可靠性的优点被人们接受。二维码作为一种全新的电子信息存储、传递与识别技术,其运用前景也越来越广阔,在我国二维码技术被广泛运用于电子商务、物流管理、电子凭证等诸多领域。本文提出了基于隐私数据的二维码存取技术,重点研究了Android手机平台上隐私数据的二维码生成与扫描识别,将信息的加密解密与二维码技术结合起来。

一维码的信息容量小,这也决定了它必须依靠数据库才能充分表达信息。因此如果没有数据库或者无法连接网络,一维码的使用就会受到极大的限制。此外,用一维码来表示汉字,需要繁琐的转化,效率不高。

二维码是为了解决一维码无法解决的问题而被研制出来的。二维码具与一维码相比,增加了多个定位点和容错机制。容错机制能够在无法识别全部二维码的时候,通过几个定位点,就还原出二维码所包含的全部信息。二维码的生成与开发较为容易,因而不同公司可能有多个不同种类的二维码,而这些二维码往往也具有不同的数据表示结构与识读方法。一般的二维码是通过三个定位点来进行辨识的。而二维码的自动校准方向也是通过这三个定位点实现的,所以从任何方向扫描二维码都是可以被识别的。容错机制则实现了不完全读取的功能,在无法读取全部条码或者条码被损毁的情况下,也能够正确地还原二维码包含的数据。

因为二维码的安全性较高,用二维码容纳信息的安全保障性较好。二维码是大容量、高密度性信息进行存储、携带与识读的高效方法。手机二维码实现的主要功能有两种:一是识读,识读是借助基于二维码识别系统的相关应用识读出条码所包含的信息,通过识读二维码可以在浏览器打开二维码内的链接,从而进行网上浏览、网上购物、信息查询等多种活动;二是身份登录,是由服务提供者向通过认证的用户发送含有身份认证信息的二维码,用户通过二维码读取设备对二维码进行扫描识别,从而实现身份识别的功能,可以作为电子凭证使用。

1.2 国内外研究情况及背景

1.2.1 国内外发展现状

国外的二维码编码解码技术的开发起源于1980年,一些科研机构研究出了多种二维码图形的编码码制。而国际自动识别制造商协会、美国标准化协会则完成了QRCode、PDF417、CodeOne、Code16K、Code49等码制的符号标准。国际电工委员会的条码自动识别技术委员会则制定了QRCode的国际标准,并且沿用到现在。而西方国家在二维码的扫描识别方面,对于相关设备的设计制造和生产拥有一套成熟的技术。各类二维码的应用系统广泛传播。

- 1 -

早在1993的时候,中国就开始进入二维码领域,对常用的几种二维码技术进行了分析与研究。随着现代社会的迅速发展和相关电子产业的爆炸式增长,电子厂商对二维码这种新技术的需求也与日俱增。

1.2.2 二维码加密算法运用的的背景

随着智能手机的普及以及信息化的发展,二维码的实用性越来越为人们青睐,利用二维码进行信息读取和用户登入已经十分普遍。

但是由于二维码技术的门槛较低,并且二维码的编码与解码技术已经非常成熟,违法分子利用二维码来传播病毒并进行犯罪活动,而一个二维码内是否具有安全隐患,从其外表上是难以辨别的,这些都严重威胁了社会的信息安全和人们的财产安全。面对二维码存在的漏洞与隐患,信息部门技术的完善与用户自身防范意识的提高都很重要,但是这些只能治标。唯有从数据本身着手,开发带有安全认证的扫码技术,才能有效防患于未然。因此,数据加密技术的运用势在必行。

在密码学中为了防止一个密码被发现内在规律而破解,密码的生成必须具有随机性,但是加密的方法也与所需加密的数据量的大小相关。DES由于需要进行16轮迭代置换,因此在对小数据量数据进行加密时具有明显的优势,而QR码的是以二进制数据0与1进行编码的,数据量较小,在满足数据加密的要求时,是比较经济的选择。 1.2.3 加密算法的发展历史

随着社会的进步,对于信息保密的要求也不断提高,加密算法也处于不断地发展完善中。早在公元前400年,古希腊人就发明了艾奈阿斯绳结等置换密码;第一次世界大战时,对于无线电信息的保密使得人们再次重视密码学;在第二次世界大战时,德军使用的“恩尼格玛”密码机,是密码学的再次实践应用;而20世纪末的时候,美国国家标准局公布实施的“美国数据加密标准”,就是现在DES加密算法的由来。 1.2.4 加密算法的分类

加密一般分为三类,分别是消息摘要算法、对称加密算法和非对称加密算法。 (1)消息摘要算法

消息摘要算法是输出固定格式与长度的密文的一种算法,与输入端数据的大小无关,经过加密后输出的密文的长度是一定的。消息摘要算法的原理是根据一定的规则对输入的数据进行有规律的提取,被提取的数据内容与原数据有对应关系,原始数据改变,则输出密文就相应变化,因此这种算法数据的保密性很高。但是,因为输出密文长度的既定性也使得其无法还原为初始数据,是不可逆的,因此消息摘要算法一般只用来对数据的完整性进行验证。

经过不断的发展完善,现在的消息摘要算法主要有MD4、MD5、SHA等几种,其中MD5算法的运用最广泛。单向散列函数MD5是公认的强度最高的加密算法,是在解决MD4冲突的漏洞的基础上发展而来的。 (2)对称加密算法

- 2 -

对称/不对称加密算法与其他算法的区别在于密钥“key”的运用。对于以往不用密钥,以固定规律变换字符串形成密码来传输消息,一旦密码变换规则被破解,那么产生的结果往往是灾难性的,二战时日本中途岛的惨败就是由于这点。而在对称加密算法中,其安全性取决于key的长度,破解难度很高。数据发送端将数据明文与密钥通过加密算法进行加密,把加密后的密文发送出去。接收方收到密文后,使用发信方的密钥及相同算法对应的逆算法对密文进行解密,就能把密文恢复成能够识读的明文。在对称加密算法中,数据的加密和解密

【1】

使用的是相同的密钥,数据的保密性完全取决于密钥的安全性。

对称加密算法主要有DES、IDEA、AES、RC4、RC5等,其中DES算法是最常用的加密算法。 (3)非对称加密算法

非对称加密算法的加密过程是单向的,即发信方将明文通过“公钥”加密后传输给收信方,收信方则用“私钥”进行解密,把密文恢复成能够识读的明文。而信息一旦加密,则 “公钥”也无法进行解密,这样即使数据在中途被人拦截,入侵者也无法对其进行破解,只有“私钥”的持有者才能识读信息内容。

非对称加密算法现在常用的是RSA算法。

1.3 可行性研究

一项设计的实现必须分析它的需求与可行性,而如果这项设计有深远意义却在技术与系统上难以实现,那么这项设计就不能称之为有意义的设计。本文结合类似的实例,主要从社会、经济、技术与操作四个方面讨论该项设计的系统开发可行性。 1.3.1 社会可行性

本设计实现了让用户通过账号登录方式扫描识别二维码的功能,并且具有操作简单 、界面友好的特点,可以使人们深入了解Android手机二维码扫描识别功能实现的过程。 1.3.2 经济可行性

目前二维码在国内已经引起用户的广泛关注,许多相关研究工作已经展开,作为一项发展前景远大的技术,资金的投入并没有问题,而本项设计的实现基于普通PC和Android手机,对硬件与系统要求都不高,成本低廉。从经济可行性分析来看是可行的。 1.3.3 技术可行性

本设计以应用和实用为主,选择了Java语言作为开发语言,Eclipse作为开发环境,并且二维码扫描与识别技术作为一项前景广阔的技术,目前在国内外得到长远发展,有较成熟的技术,技术上是完全可行的。

本设计综合考虑了数据加密的相关原理和数字图像加密方法与优缺点之后,研究了对数据进行加密解密的方法,与二维码的结构特征和生成、扫描识别方式,通过Java程序的设计,实现DES加密算法与二维码加密的有机统一,来确保其安全性与保密性。 1.3.4 操作可行性

本设计只需要一台Android智能手机安装应用并进行二维码的扫描识别,操作方便可行。

1.4 本文研究内容

- 3 -

本文研究的内容如下:

(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 -

开 始 调 用 相 机 功 能 采 集 条 码 图 像 图 像 预 处 理 读 取 数 据 图 像 处 理 、矫 正、译 码 显 示 文 本 信 息 图3 系统流程图

4.2 数据加密与二维码生成模块的实现

4.2.1 数据加密模块的实现——DES加密算法 (1)构造DES加密的函数,并初始化密钥。 public DES(String key){ this.key = key; }

(2)输入参数后,先对参数格式的正确性进行检测,如果错误就直接返回空(null)。 private byte[] UnitDes(byte[] des_key, byte[] des_data, int flag) { if ((des_key.length != 8) || (des_data.length != 8) || ((flag != 1) && (flag != 0))) {

hrow new RuntimeException(\}

(3)首先设置好DES加密算法的置换方法。 初始化密钥数组,并进行PC-1、PC-2、??、置换。

例如:对密钥进行PC-1变换,并生成生成子密钥keyarray[i][j] private void KeyInitialize(int[] key, int[][] keyarray) { int i; int j; int[] K0 = new int[56]; for (i = 0; i < 56; i++) {

K0[i] = key[PC_1[i] - 1];

- 9 -

}

for (i = 0; i < 16; i++) {

LeftBitMove(K0, LeftMove[i]);for (j = 0; j < 48; j++) { keyarray[i][j] = K0[PC_2[j] - 1]; } } }

4)当dest和src两个都不为空时,将源数组src组件的子序列复制到引用的dest目标数组中。

ublic void arraycopy(byte[] src,int srcPos,byte[] dest, intdestPos,int length){ if (dest != null && src != null){ byte[] temp = new byte[length]; for (int i = 0;i < length;i++){ temp[i] = src[srcPos + i]; }

for (int i = 0;i < length;i++){ dest[destPos + i] = temp[i]; }

(5)加密算法设计。

对原始数据长度进行检测,原始数据长度不满四位的加0补满四位,并且保证原始数据的前4位为该数据的长度。key是密钥,data是要处理的数据,flag 1为加密,0为解密,return 处理后的数据。

public byte[] encrypt(String data) throws UnsupportedEncodingException{ String dataLength = data.length() + \if (dataLength.length() == 1){ dataLength = \}else if (dataLength.length() == 2){ dataLength = \}if (dataLength.length() == 3){ dataLength = \}

StringBuffer sbDate = new StringBuffer(); sbDate.append(dataLength); sbDate.append(data);

byte[] bytekey = key.getBytes();

- 10 -

byte[] bytedata = sbDate.toString().getBytes();

byte[] result = new byte[(bytedata.length + 8) - (bytedata.length % 8)]; result = DesEncrypt(bytekey, bytedata, 1); return result; }

(6)输入端信息的的DES加密如图4所示。

图4 数据的DES加密结果图

4.2.2 二维码生成模块

本设计的二维码是首先在Eclipse软件中利用DES.java加密解密程序,将输入的数据用密钥进行加密,再将得到的密文在草料网上转化为二维码所得。二维码的转化实现如图5所示。

图5二维码的转化

4.3 二维码扫描识别与数据解密模块的实现

4.3.1 系统界面设计

本设计的用户界面模块提供了一个用户操作的界面,可以进行用户的登录,并且显示拍摄的窗口。手机用户通过用户界面的菜单进行输入与选择操作。图6是用户原始界面。

- 11 -

图6 用户原始界面 4.3.2 二维码扫描识别的实现

本设计中,在建立工程(Project)时借助了Google提供的开源类解码核心库Zxing,用于实现对二维码的扫描与识别,借助Zxing里的类库,调用其中的特定函数进行解码功能的实现。 Zxing是一个开放源码的图像处理库,它借用了Java来对条码进行编写。

在对二维码进行扫描识别时需要用到摄像头功能,因此本设计选用了使用广泛的Android系统智能机进行二维码的识别测试。 (1)系统包含的包结构图 (2)系统主要包的功能介绍

本设计的主要包包括:Previewcallback:摄像头回调包;CameraManager:摄像头管理包,主要管理摄像头功能的开关;DecodeHandle:数据传输包;DecodeFormatManager:配置解码格式包;CaptureActivityHandle:是解码成功的数据传输媒介; Encoding:根据输入的字符串生成二维码;AndroidManifest.xml:配置文件。ViewfinderView 是自定义的View,是拍摄时Android手机屏幕中间的取像框。

加载main activity,在此类中创建CaptureActivityHandle对象,由该包调用手机的摄像头。创建DecodeThread线程,该线程创建了Decodehandle对象,而这个对象获取从摄像头采集到的并转化后的原始byte数据。

包结构图见图7。

- 12 -

图7 包结构图

(3)设置界面布局,设置Activity关联视图集根。OnCreate方法是在Activity被创建时被系统调用的,是Bundle类型的参数,savedInstanceState方法用来保存Activity状态,super

图8 设置界面布局

调用(成员方法)。见图8。

(4)打开扫描界面扫描二维码。见图9。

- 13 -

图9 扫描二维码

public void onClick(View v) {

Intent openCameraIntent = new

Intent(BarCodeTestActivity.this,CaptureActivity.class); startActivityForResult(openCameraIntent, 0); }

4.3.3 数据解密

(1)解密算法设计。解密算法程序如图10所示。

图10解密算法程序图 public String decrypt(byte[] encryptData) throws UnsupportedEncodingException{ byte[] bytekey = key.getBytes();

byte[] result = new byte[encryptData.length];

- 14 -

result = DesEncrypt(bytekey, encryptData, 0); String deResult = new String(result); System.out.println(\

int dataLength = Integer.parseInt(deResult.substring(0, 4)); return deResult.substring(4, dataLength+4); }

(2)获取解密密钥。输入密钥,并且选择“显示”button,如图11所示。

图11输入密钥

public void onClick(View v) { }

key = QRStrEditText.getText().toString();

(3)获取到二维码解码后的字符串,并且根据key进行解密,输出密钥“key=12345678”。 public void handleDecode(Result result, Bitmap barcode) throws UnsupportedEncodingException { inactivityTimer.onActivity(); playBeepSoundAndVibrate();

String resultString = result.getText();

System.out.println(\String key = BarCodeTestActivity.getKey(); System.out.println(\

- 15 -

(4)处理扫描结果,如果密码正确,就在界面上显示,否则不显示。见图12。

图 12 密码检测程序

(5)调用DES程序对密钥key进行加密解密,并以Base64编码方式对结果字符串进行编码,输出加密后的字符串。 DES des= new DES(key);

byte[] encryptStrByte = Base64.decode(resultString); String decryptStr = des.decrypt(encryptStrByte); System.out.println(\

(6)本设计中代码生成的二维码经过扫描后得到的运行结果如图13与图14所示。图13是输入密钥并经过验证正确性通过后,选择open camera按钮,扫描二维码,并且经过该BarCodeTset.apk软件内部分析后,输出扫描到的二维码结果;图14则是输入错误的密码后,打开摄像机扫描二维码,但是界面没有任何变化 。

- 16 -

图13密码正确的运行结果 图14密码错误无运行结果

4.4 Android Camera的调用

在二维码的扫描过程中,对手机摄像头camera的调用可以说是重中之重,启用了多线程

对摄像头进行回调应用,如果一次回调的二维码图形没有成功识别,就开始下一次回调,直到识别出二维码编码为止。在设计中用initCamera()函数实现手机摄像头功能的开启。

将摄像头获取的正确的位图信息,以特定的算法对图像进行处理。经过图像预处理和定位点识别之后,识别出摄像头采集的图像含有的码图像,并且根据二维码的三个定位点将主体数据区域进行处理,将采集到的图片信息进行二值化操作,并将所得的数据发送给数据核心解码模块进行解析。

由于需要采集的二维码的大小不同,清晰度不同等诸多差异,手机的摄像头往往不能很好的采集图像,因此就要使摄像头进行自动对焦。当识别完成以后根据识别的结果,对用户进行提醒,通过二维码识别结果的成功或失败,让手机显示识别出来的结果,或者发出失败提示的声音。

5 系统调试及测试

5.1 系统调试

在程序的设计过程中,出现过很多语法错误,在程序运行时,进行程序正确性的检查从而发现错误,而这类的错误也是易于发现与解决的错误。还有很多逻辑错误则相对难以排查与解决,需要参考很多资料与相关文献解决问题。

5.2 系统测试

- 17 -

系统的测试是一项非常重要的步骤,是保证系统正确性的保证,系统中的各种错误也都需要通过测试来排查。但是测试的意义并不在于发现错误,而是让我们通过分析错误产生的原因与错误所在的程序部位,进而发现系统的缺陷与漏洞,最终完善系统。

5.3 测试结果

将具有Android系统的手机与电脑相连接,并且下载BarCodeTest.apk文件,安装该应用,并且打开,出现界面。之后手机就可以调用程序来调用摄像头来扫描生成的二维码,并进行识别。

5.4 测试阶段复审与评价

经过测试,表明该系统已基本达到预定的目标,符合需求分析阶段的全部能。总体而言,可以认为本系统基本功能已实现,可以投入运行。

- 18 -

结 论

本次设计的目的在于实现Android手机二维码的扫描与识别功能,基于DES加密解密算法,设计包括从用户界面上的密钥登录,调用摄像头进行图像的采集,到对二维码进行识别和条码包含信息的输出几部分。本设计根据QR码的特点展开,完成了Android智能手机对二维码的扫描与识别功能,良好的运行效果及测试结论证明了Android系统手机二维码扫描系统在现实中有一定的实用价值,尤其是对于现在的物联网技术有一定的借鉴意义。

- 19 -

参 考 文 献

[1] 汪利琴.数据库加密技术的研究和探讨[J].科学视界,2012,(19).

[2] 王亮,曾连荪.基于Android平台智能云导游系统的探索[J].电子设计工程,2012,(12).

[3] 刘柯言.中国电信手机二维码业务市场拓展研究[D].北京邮电大学硕士学位论文,2009. [4] 韩骁.基于手机二维条码电子车票的研究[D].河北工业大学硕士论文,2011. [5] 刘东,高西全.QR码图像处理及识别算法的研究[J].电子科技,2004.

[6] 张定会,江平. QR码DES加密与解密[D].上海理工大学广电信息与计算机工程学院.2011 .

- 20 -

本文来源:https://www.bwwdw.com/article/jms6.html

Top