本科毕业设计(论文)
面向 android 手机的人脸识别系统的研发
学 院 计算机学院
专 业 计算机科学与技术
年级班别 2009 年 1 班
学 号
学生姓名
指导教师
2022 年 08 月
摘 要
随着信息技术的飞速成长和成熟,现代信息技术已经渗入到人们日常生活的方方面
面。人们无论是工作、生活、休闲娱乐,都会与各种信息媒介发生打交道,而接触的同
时,也会产生个人隐私信息泄漏的隐患。
由于互联网应用而产生的隐私泄露已经屡见不鲜,邮箱、游戏帐号等信息会由于网
络环境的开放而产生被盗取的危险,人们已经时刻警惕并采取了类似安装电脑杀毒软件、
防火墙等的方式加以保护。此外,十几年来发展至今的移动通讯工具——手机,已经由
起初的简单通讯设备,逐渐演变为集合越来越多的个人应用并可移动获取资讯的新的个
人信息中心。开放式手机平台的普及标志着智能手机时代已经来临,就中国而言,2008
年末 3G 牌照的正式发放,更使得手机终端各种新应用服务势如春笋,而由于手机作为
新一代个人信息中心,关于手机产生的“隐私”和“信息安全”的关注度也随之提升。
作为个人的信息移动终端,手机的私密性更强,用户在手机上的私人信息与自身利
益更加相关。手机的通讯录,通话记录,短信这些信息都已成为了您重要的私密信息。
近期以来,随着各种手机信息安全事件及隐私泄漏事件的频频出现,手机防偷窥和防信
息泄露的越来越收到人们的关注。
关键词:智能手机,个人信息安全,加密解密
Abstract
With the rapid development of information technology and become more and more
mature,modern information technology has penetrated into every aspect of people's daily
people work,life,entertainment,they can not deal with all kinds of information
without media people close to the media occurs,it also bad to people because of
the hidden danger from privacy information.
More and more privacy has been happen because of the Intent,The mailbox,game account
information such as the network environment of opening up has become easy to stolen
have to be vigilant and to adopt a similar installation of computer antivirus
software,firewall to protect their privacy .In addition,since the development often years,the
mobile communication tool--mobile phone, this Simple communication equipment has
become new Personal information center collection and mobile access to
information,open-ended mobile phone platform penetration marks the era of intelligent
mobile phone has far as China is concerned,the formal issuance of 3G licenses
issuance by the end of 2008,so more and more various new application service has been
produced,as the mobile phone as a new generation of personal information center,attention on
mobile phone produces"privacy"and"information security"will increase.
Key words:keyword1 ,keyword2,keyword3
目 录
1 绪 论.....................................................................................................................................1
研究目的和意义...........................................................................................................1
国内外技术发展现状与趋势.......................................................................................1
题目研究方法........................................................................................................2
2 相关技术.................................................................................................................................4
ANDROID 系统...............................................................................................................4
ANDROID 应用的构成和工作机制 ...................................................................................6
ACTIVITY .....................................................................................................................7
INTENT RECEIVER ........................................................................................................8
SERVICE .......................................................................................................................8
CONTENT PROVIDER ....................................................................................................9
开发语言—JAVA 语言简介..............................................................................................9
SQLITE 数据库 ................................................................................................................10
DES 算法.........................................................................................................................10
3 系统设计与实现...................................................................................................................12
需求分析 .........................................................................................................................12
系统开发环境 ................................................................................................................12
系统架构 .........................................................................................................................12
具体功能实现 .................................................................................................................13
界面布局 ..................................................................................................................13
添加权限 ..................................................................................................................15
数据库模块 ..............................................................................................................16
程序锁功能 ..............................................................................................................18
DES 加密解密算法实现 ..........................................................................................19
XML 保存私人信息.................................................................................................20
4 功能演示...............................................................................................................................22
配置虚拟机 ....................................................................................................................22
程序锁 ...........................................................................................................................23
加密解密 ........................................................................................................................24
结论...........................................................................................................................................28
参考文献...................................................................................................................................29
致 谢.......................................................................................................................................30
1 绪 论
研究目的和意义
在信息社会,信息安全关乎着每一位信息相关者的切身利益。随着 3G 网络的大规
模建造及其业务的逐步应用,宽带移动通信呈现高速发展态势。移动通信在运行中存在
两大安全隐患:一是一旦手机失窃或丢失,存入手机内的信息资源会随之丢失,并可能
产生一系列负面影响;二是手机的短信、通讯录等信息传输常遭到非法读取,机主正当
通讯权益遭受威胁。
伴随着手机应用业务的发展,信息安全需求越来越显得重要。移动设备信息安全,
是当前应用领域前沿热点问题。尽管国内外对此有比较广泛的研究,但是还不够深入,
还没有真正有效的市场产品。
本项目将研发一种基于人脸识别系统 android 手机安全软件,旨在解决上述信息安
全问题。该安全软件融合人脸生物特征值技术和对私人信息加解密技术,以人脸特征标
识符和随机字符为密钥,建立信息加密体系,实现加密密钥的防盗换,并以此实现手机
安全认证和短信、通讯录等信息隐匿传输。
为此,我们将致力于手机人脸图像捕获、人脸检测、人脸识别算法,手机加密算法,
等关键问题的研究,以期实现突破,建立有效的对手机信息及数字内容安全算法及软件,
以及合理的处理与响应速度。项目所研发的新型手机信息及数字内容安全软件,将在相
关手机操作系统和开发软件环境下作试验。
国内外技术发展现状与趋势
中国报告大厅《2012 年中国手机市场研究预测报告》研究表明,2010 年全球手机
销量上升 32% 达到 亿部。智能手机销量较去年同期增长 72% 至 297 万台,基
于 Android 平台的设备,其销售增加了近十倍至 67 亿美元。
《2012 年中国手机市场研究预测报告》研究表明,中国移动终端市场 2010 年第 4
季度国内手机销售总量达 万部(不计黑手机和水货手机),环比增长 5%。本季度 3
G 手机销量突破了 1500 万大关,环比增长 %。截止 2010 年 12 月,CDMA 手机已
占中国手机市场销量的 %,其中,名列国内 CDMA 手机市场 2010 年度销量前两位
的企业分别是三星和华为。
就手机中应用的生物识别技术而言,目前有提到的只有指纹、声音、人脸识别三种
种方法。2011 年美国摩托罗拉公司推出了带指纹识别 3G 手机 ME960;而三星的上代旗
舰手机的文件系统底层里面,发现了“” 文件和指纹识别相关图片,苹果
也在去年夏天收购了安全技术公司 AuthenTec,更和仿生安全系统公司 Microlatch 达成
交易。但是现在我们还没见到苹果手机有相关的技术成果,不过也表明苹果公司也在致
力于研发指纹识别方面的技术。声音识别技术在手机中的应用早在五年前已经开始研制,
并在目前的多款手机中应用[2]。
2011 年 10 月 19 日,谷歌和三星在香港召开新闻发布会,正式发布代号为“冰激凌
三明治”的谷歌新一代 Android 系统以及三星 GALAXY Nexus 智能手机。谷歌新一
代 Android 系统拥有全新设计的 UI,界面简化,运行速度能力提升。系统内置全新
的壁纸,在使用手机上的触摸按钮时会出现发光效果,并且增加了语音输入、人脸识别、
照片编辑、流量监测、Android Beam 功能。而在最新的报道里面,谷歌还准备在谷歌
眼镜里面添加人脸识别功能,但 Glass 产品总监 Steve Lee 之前曾对纽约时报讲述过,
除非有隐私保护政策,否则不会加入人脸识别功能。而和 android 手机一样操作系统的
平板电脑,谷歌公司推出了一项新的功能,当用户通过 Android 平板电脑观看电影并按
下暂停键时,可以自动在屏幕上提供电影演员和音乐的背景信息。
而完成机主识别过程,同时利用生物特征值和数字水印对手机内的数字内容、短信、
个人名片簿等重要信息加密或隐藏,有效提升了个人信息的安全性。这项应用现在也有
很多三方应用在 android 市场出现。
题目研究方法
Android 的安全设计包括以下两个原则:
在默认情况下,在 android 平台下运行的应该程序没有权限执行对其他应用程序,
操作系统有害的操作。这些操作包括读写用户的隐私数据(如联系方式或短信)等。
(2)Android 应用程序的进程是运行在一个安全的“沙箱”环境中。它不能干扰其他应
用程序,除非它明确声明权限。这些权限请求能够被不同方式的操作所处理,特别的要
基于证书和用户的提示被自动允许或禁止。而且权限请求在应用程序中被声明为静态,
所以在此之后在安装的时候系统会预先知道。基于 android 的安全设计原则,我们无法
对手机的隐私数据直接操作,而谷歌的 android 手机系统的架构是 Linux 内核、C/C++函
数库、Dalvik 虚拟机、应用框架以及关键应用程序构成的,只要取得 root 权限,就可以
对手机的一切信息进行操作,但是有利有弊,root 权限对手机的安全造成了很大的影响,
而谷歌在设计 android 系统的时候为了提供为用户一个良好的平台也提供了一个私人信
息同步的模块,为了此模块,android 设计了数据存取与共享机制 ContentProvider 为应
用程序提供一些访问方法, 使用 Content Provider 能够灵活的替换底层使用的存储设备,
使开发者可以专著于应用逻辑的开发,不用考虑底层存储设备的细节,从而使应用系统
具有良好的数据[12]。
但是此共享机制必须得到相应的权限,而且用户在安装此类软件的时候会提示用户。
所以加密解密此模块就是建立在 ContentProvider 这种共享机制上面。通过间接的方式对
手机拥有者的个人隐私信息进行读取,加密解密。
2 相关技术
Android 系统
Android 一词的本义指“机器人”同时也是 Google。于 2007 年 11 月 5 日宣布的基于
Linux 平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用
软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件。它采用软件堆层
(Software Stack,又名软件叠层)的架构,主要分为三部分。底层以 Linux 内核工作为基
础,由 C 语言开发,只提供基本功能;中间层包括函数库 Library 和虚拟机 Virtual Machine,
由 C++开发。最上层是各种应用软件,包括通话程序,短信程序等,应用软件则由各公
司自行开发,以 Java 作为编写程序的一部分,不存在任何以往阻碍移动产业创新的专有
权障碍。Google 通过与软、硬件开发商、设备制造商、电信运营商等其他有关各方结成
深层次的合作伙伴关系,希望借助建立标准化、开放式的移动电话软件平台,在移动产
业内形成一个开放式的生态系统[1]。
对于设备制造商来说,Android 是一个免费的平台。对硬体开发厂商来说,Android
是个开放的平台。只要厂商有能力,可以在这个平台上自由加入特有的装置或功能,不
受手机作业系统厂商的限制。对于手持装置的开发者来说,Android 是个先进的平台。
平台上的应用程式可相容于各种型号的 Android 手机,免去为各种不同手机机型开发的
困扰。Android 平台支援各种先进的网络、绘图、3D 处理能力,可以用来提供更好的
使用者体验。Android 它的开放性就优于其它封闭式的手机系统,因此,任何人都可能
根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作
系统。
关键应用程序:Android 平台内包含一些关键应用程序,如邮件收发客户端程序、
短信收发程序、日历、网页浏览器等,而更多有特色的 Android 应用程序还有待于广大
开发者共同参与开发[3]。
Java 程序运行环境:Android 的 Java 程序运行环境包含一组 Java 核心函数库及 Dal
vik 虚拟机,它们有效地优化了 Java 程序的运行过程。
Linux 内核:Android 系统平台基于优化了的 Linux 内核,它提供诸如内存管理、进
程管理、设备驱动等服务,同时也是手机软硬件的连接层。
Android 应用程序以各种组件(API)为基础,API 是 Android 软件平台的重要组成部
分,也是开发 Android 应用的关键所在[4]。
当前活动程序 Activity:作为最常用的应用程序组件,几乎所有 Activity 都会通过创
建 U I 窗口与用户进行交流。Activity 具有生命周期,它包含运行、暂停、停止等几个
状态,状态间的转换可通过调用 onCreate()、onStart()、onRestart()、onResume()、onFreeze()、
onPause()、onStop ()、onDestory()等方法来实现。要开启新的 activity,可以调用 startActivity(Int
ent),或调用 startSubActivity(Intent, int),后者通常和 onActivityResult(int,int,
String,Bundle)联合使用,以从一个 activity 获取某结果并返回给打开它的 activity[5]。
事件 Intent: Intent 抽象描述了想要执行的某种操作,它与 startActivity 一起使用可
以开启新的 activity,与 startService 一起使用可以开启后台服务。Intent 最重要的作用
还是加载 activity,它是不同 activity 间的桥梁。Intent 也可以被认为是一种概括操作行
为的数据结构,它主要包括 action (动作)和 data(数据)两部分,此外它还具有一些附加
属性如 category(intent 种类)、type (数据类型)等。常用的 Intent 方法有 intent() (构造
intent)、addcategory() (添加 intent 类型)、getAction()(获取 intent 动作)、getData()(获取 inten
t 数据)等[6]。
数据存取与共享机制 ContentProvider: ContentProvider 为应用程序提供一些访问方
法,包括: Query(Uri, String [ ] , String,String[ ] , String, String, String)(数
据信息的查询) ,insert (Uri, Contentvalues) (在 Contentp rovider 中添加新数据) , updat
a(Uri, Contentvalues, String, String[ ])(更新 Conntp rovider 中的数据), delect(Uri,
String,String[ ])(删除数据) , Gettype (Uri)(获取数据类型)。其中,Uri 标明了 ContentProv
ider 存储的数据类型,在执行访问方法时都需依据 Uri 作为路径标识来确定要访问哪个
ContentProvider。
后台服务 Service: Service 是运行在后台的应用程序组件,不直接与用户交互。当前
活动程序可以使用 Context. StartService()开启一项后台服务,还可以通过 Context. bindSe
rvice()与后台服务通信[7]。
Android 的架构是 Linux 内核、C/C++函数库、Dalvik 虚拟机、应用框架以及关键应
用程序构成的,如图 2-1。通过编译基于框架的应用程序可以降低开发负荷。应用软件
原则上是在 Dalvik VM 上运行的。
图 2-1 Android 架构图
Android 的 Java 程序运行环境包含一组 Java 核心函数库及 Dalvik 虚拟机,它们有
效地优化了 Java 程序的运行过程。所有的 Android 应用都运行在它自己的进程里,该进
程是一个 Dalvik 虚拟机的实例,Dalvik 被设计成能在一台设备上高效的运行多个虚拟机
实例。Dalvik 虚拟机的可执行文件被封装成 Dalvik 可执行格式(.dex)。这是被优化过的
最小内存依赖的格式。Java 编译器(dx 工具)将注册了的和运行时用到的类编译成.dex 格
式。Dalvik 虚拟机依赖于底层 Linux 内核提供的功能,如线程机制,和内存管理机制等。
Android 应用的构成和工作机制
对于一个 Android 应用程序来说,是由 Activity、 Intent Receiver 、Service、Content
Provider 四部分组成,但并不是每一个 Android 应用程序都必须由这四部分组成。在应
用程序中使用时,需要在配置文件 AndroidMainfest.xml 中进行配置。这个配置文件是
每个 Android 应用程序所必需的,用于定义应用程序的组件、组件的功能以及必要条件
等[8]。
Activity
Activity 是构成应用程序中最重要的构造块, 在 Android 应用程序中,几乎都是通
过 Activity 来与用户进行交互,所以 Activity 主要负责的就是创建与用户进行交互的显
示窗口,你可以在这些窗口里通过调用 setContentView(View)方法来显示你自己的用户
界面[9]。
活动(Activity)在系统中以活动栈的形式进行管理。当一个新的活动启动后,被放到
了栈顶,成为了运行活动,而新活动之前的活动在活动栈里总位于新活动之下,直到新
的活动退出才重新回到前台。
从图 2-2 可以看出,Activity 有三个关键的循环:
(1)活动的整个生命期:从首次调用 onCreate(Bundle)开始,到最终调用 onDestroyO
结束。在 onCreate()中进行所有初始化,在 onDestroyO 时进行清理工作,释放资源。
(2)活动的可见生命期:从调用 onStart()开始,到 onStop()被调用为止。在这段时间
内,即使活动不与用户进行交互,用户也可以在屏幕上看到它。在这两个方法调用之间,
可以维护活动显示给用户的资源。onStart()和 onStop()方法可以多次调用,因为活动随
时可以在可见和隐藏之间进行转换。
(3)活动的后台生命期:从调用 onResume()开始,到 onPause()被调用为止。这段时
间内活动处于其它所有活动之前,并与用户进行交互。一个活动可以不断在 resumed 状
态和 paused 状态之间变换。
Android 使用了 Intent 类来实现活动之间的切换工作。Intent 负责对应用中一次操作
的动作、动作涉及的数据和附加数据进行描述。根据 Intent 的描述,负责找到对应的组
件,将 Intent 传递给调用的组件并完成组件的调用。因此,Intent 起着一种媒体中介的
作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。在应用
中,我们可以以两种形式来使用 Intent:直接 Intent,指定了 component 属性的 Intent,
通过指定具体的组件类,通知应用启动对应的组件。间接 Intent,没有指定 component
属性的 Intent,则需要包含足够的信息,这样系统才能根据这些信息,在所有的可用组
件中,确定满足此 Intent 的组件[10]。
图 2-2 Activity 状态变换路径图
Intent Receiver
Intent Receiver 是用于对外部事件的响应,当外部事件发生时,会使用 Notification M
anager 通知用户。当一个 Intent Receiver 被触发时,系统会在需要的时候启动对应的应
用程序。如在本系统中,当用户正在其它界面进行操作时,有好友发送消息过来,就会
以通知的形式发送到当前界面的正上方来通知用户。各种应用还可以通过使用
Context.Broadcast Intent()将它们的 Intent Receiver 广播给其它的应用程序,实现应用
之间的通讯[11]。
Service
Service 是提供连续信息的应用程序。它是运行于应用程序后台的服务,在用户进行
其它活动的时候,这个服务将一直运行在基于 Android 平台的即时通讯系统的研究与实
现后台,直到用户停止该服务或服务运行结束。本系统客户端扩展功能就是采用 Service
来进行设计和开发的。
Activity
Starts
onCreate()
onStart()
New Activity is
started
onResume()
Activity is
running
onStop()
Your Activity is no
long visible
onPause()
onDestroy()
Activity is
shut down
User navigates
back to your
Activity
Process is
killed
Other
application need
memory
OnRestart()
Your Activity comes
to the foreground
Your Activity comes
to the foreground
Content Provider
Content Provider 应用程序能够将它们的数据保存到文件、SQL 数据库和其它的存
储设备中。当应用程序需要使用存储设备中的数据时,可以使用 Content Provider 来完
成。使用 Content Provider 能够灵活的替换底层使用的存储设备,使开发者可以专著于
应用逻辑的开发,不用考虑底层存储设备的细节,从而使应用系统具有良好的数据。
开发语言—java 语言简介
Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Micros
ystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaSE, JavaEE, Ja
vaME)的总称。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应
用于个人 PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网,同时拥
有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java 更具备
了显著优势和广阔前景。
开发工具及平台搭建
Android 的上层应用程序是用 Java 语言开发,同时还需要基于 Dalvik 虚拟机,所以,
Google 公司推荐使用主流的 Java 继承开发环境 Eclipse。只有 Eclipse 还不够,因为是使
用 Java 语言进行开发,还应该有由 SUN 公司提供的 Java SDK(其中包括 JRE:Java Runt
ime Environment)。此外,Android 的应用程序开发和 Java 开发有较大区别的,所以还
需要有 Google 提供的 Android SDK。同时,还需要在 Eclipse 安装 ADT,为 Android 开
发提供开发工具的升级或者变更,是 Eclipse 下开发工具的升级下载的工具。
简言之,需要以下软件,才能搭建 Android 开发环境,从而进行 Android 应用程序
的开发。
(1) Java SDK
(2) Eclipse
(3) Android SDK
(4) ADT
Android 开发平台搭建步骤:
(1)首先到下载 Eclipse 集成开发环境并且解压,这里推荐下载 Java EE 集成版本。
去 站点下载 SDK 后安装,下载,Android 后解压。第一步下载工序就结束了。
(2)双击 Eclipse 解压后目录中的 然后启动,选择 Eclipse 菜单中的 Help->I
nstall New Software-> Available Software,点击右侧的“Add”输入后确定,然后在“Work
with”下拉菜单中选择刚才输入的网址。过一会就会出现一个 Developer Tools 选项,勾
上以后点击 Next 以后 Eclipse 会自动网上查找 Android 开发工具插件,然后要到 Androi
d DDMS 和 Android Development Tools,选中这两个点击 Finish,Eclipse 就会自动下
载并安装 Android 插件了,最后会提示重启 Eclipse。
(3)重启后选择 Eclipse 菜单中的 Windows-> Preferences 在左侧的 Android 项目
中 SDK Location 中填入 Android SDK 解压后的目录,然后点击 Apply。
(4)在 Windows XP 的系统变量中的 path 变量中添加一个值,该值指向解压后的
Android SDK 目录下的 tools 文件夹。
SQLite 数据库
SQLite 是遵守 ACID 的关系型数据库管理系统,它包含在一个相对小的 C 库中。它
是 建立的公有领域项目。
不像常见的客户-服务器范例,SQLite 引擎不是个程序与之通信的独立进程,而是
连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接 API
调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、
索引和数据本身)都在宿主主机上存储在一个单一的文件中。它的简单的设计是通过在
开始一个事务的时候锁定整个数据文件而完成的。
Android 在运行时集成了 SQLite,所以每个 Android 应用程序都可以使用 SQLite
数据库。对数熟悉 SQL 的开发人员来时,使用 SQLite 相当简单[13]。
DES 算法
数据加密算法(Data Encryption Algorithm,DEA)的数据加密标准(Data Encryption
Standard,DES)是规范的描述,它出自 IBM 的研究工作,并在 1997 年被美国政府
正式采纳。它很可能是使用最广泛的秘钥系统,特别是在保护金融数据的安全中,最初
开发的 DES 是嵌入硬 件中的。通常,自动取款机(Automated Teller Machine,
ATM)都使用 DES。[8]DES 使用一个 56 位的密钥以及附加的 8 位奇偶校验位,产
生最大 64 位的分组大小。这是一个迭代的分组密码,使用称为 Feistel 的技术,其中
将加密的文本块分成两半。使用子密钥对其中一半应用循环功能,然后将输出与另一半
进行“异或”运算;接着交换这两半,这一过程会继续下去,但最后一个循环不交换。DES
使用 16 个循环。
攻击 DES 的主要形式被称为蛮力的或彻底密钥搜索,即重复尝试各种密钥直到有
一个符合为止。如果 DES 使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。
随着计算机系统能力的不断发展,DES 的安全性比它刚出现时会弱得多,然而从非关
键性质的实际出发,仍可以认为它是足够的。
3 系统设计与实现
需求分析
功能需求:
1.程序锁:监听 android 系统的任务栈,判断这个应用的包名,程序名,是否是要锁
定的应用名字一致。
2.加密解密:通过 DES 加密算法,对手机私人信息如短信,通讯录进行加密解密。
系统开发环境
硬件配置:
机器:普通台式机
CPU: Core 2 T5670
内存:DDR2 3G
硬盘:500G
操作系统:Microsoft Windows 7
开发工具:eclipse ,SQLite Expert Personal 3
工具插件:Android SDK
系统架构
系统架构采用三层架构,模型层(model)-视图层(view)
-控制器层(controller)并作为之后组件和模块设计的架构依
据。
视图层主要显示 UI 界面,模型层主要存放与 UI 分离的业
务数据操作。控制器层主要目的则是确保模型层和视图层的同
步,一旦模型层改变,视图层应该同步更新。
具体功能实现
界面布局
Android 的资源文件保存在/res 的子目录中。其中/res/drawable/目录中保存的是图像
文件,/res/values 目录中保存的是用来自定义字符串和颜色的文件,/res/xml 目录中保存
的是 XML 格式的数据文件。所有在程序开发阶段可以被调用的资源都保存在这些目录
中,在对界面进行绘制时要考虑到不同手机屏幕大小可能不一样,应尽量兼容大多数手
机屏幕尺寸,使之显示无障碍。主界面绘制代码如下:
<?xml version="" encoding="utf-8"?>
<LinearLayout xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="40dip"
android:gravity="center_horizontal|center_vertical"
android:orientation="horizontal" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="程序锁"
android:textColor="#000000"
android:textSize="22sp" />
<CheckBox
android:id="@+id/open"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="开启程序锁" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/lv_app_lock"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dip"
android:cacheColorHint="@android:color/transparent"
> </ListView>
<LinearLayout
android:id="@+id/ll_app_manager_loading"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical|center_horizontal"
android:orientation="vertical"
android:visibility="invisible" >
<ProgressBar
android:layout_width="60dip"
android:layout_height="60dip" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="正在加载应用程序"
android:textColor="@android:color/white"
android:textSize="18sp" />
</LinearLayout>
</FrameLayout>
</LinearLayout>
当用户打开程序而刚刚好在数据库中是必须加锁的时候,会跳出一个窗口,要求用
户输入密码来通过验证权限。绘制代码如下:
<?xml version="" encoding="utf-8"?>
<RelativeLayout xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ImageView
android:id="@+id/iv_app_lock_pwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:src="@drawable/ic_launcher" />
<TextView
android:id="@+id/tv_app_lock_pwd"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_alignBottom="@+id/iv_app_lock_pwd"
android:layout_marginLeft="88dp"
android:layout_toRightOf="@+id/iv_app_lock_pwd"
android:textColor="@android:color/black"
android:text="程序名" />
<EditText
android:id="@+id/et_app_lock_pwd"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/iv_app_lock_pwd"
android:layout_marginTop="46dp"
android:ems="10"
>
<requestFocus />
</EditText>
<Button
android:onClick="confim"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/et_app_lock_pwd"
android:text="确定" />
</RelativeLayout>
添加权限
在默认情况下,在 android 平台下运行的应该程序没有权限执行对其他应用程序,
操作系统有害的操作。这些操作包括读写用户的隐私数据(如联系方式或短信)等。除非
它明确声明权限。这些权限请求能够被不同方式的操作所处理,特别的要基于证书和用
户的提示被自动允许或禁止。而且权限请求在应用程序中被声明为静态,所以在此之后
在安装的时候系统会预先知道。需要添加的权限代码如下:
<uses-permission android:name="_TASKS" />
<uses-permission android:name="_SMS" />
<uses-permission android:name="_EXTERNAL_STORAGE" />
<uses-permission android:name="_SMS" />
<uses-permission android:name="_CONTACTS" >
<uses-permission android:name="_EXTERNAL_STORAGE" >
</uses-permission>
<uses-permission android:name="_CONTACTS" >
</uses-permission>
数据库模块
为保存需要加锁的程序包名,在sqlite中创建了一个数据库保存起来,实现代码如下:
public void onCreate(SQLiteDatabase db) {
("CREATE TABLE applock (_id integer primary key autoincrement, packname
varchar(30))");
}
为了更方便的操作数据库,创建了 来对数据库进行增删改查的操
作,代码实现如下:
public class AppLockDao {
private Context context;
private AppLockDBHelper dbHelper;
public AppLockDao(Context context) {
= context;
dbHelper = new AppLockDBHelper(context);
}
/**
* 查询
*/
public boolean find(String packname) {
boolean result = false;
SQLiteDatabase db = ();
if (()) {
Cursor cursor = (
"select packname from applock where packname=?",
new String[] { packname });
if (()) {
result = true;
}
();
();
}
return result;
}
/**
* 添加
*/
public void add(String packname){
if(find(packname)){
return ;
}
SQLiteDatabase db = ();
if(()){
("insert into applock (packname) values (?)", new Object[]{packname});
();
}
}
/**
* 删除
*/
public void delete(String packname){
SQLiteDatabase db = ();
if(()){
("delete from applock where packname=?", new Object[]{packname});
();
}
}
/**
* 查找全部包名
*/
public List<String> getAllApps(){
SQLiteDatabase db = ();
List<String> packnames = new ArrayList<String>();
if (()) {
Cursor cursor = ("select packname from applock", null);
while (()) {
String packname = (0);
(packname);
}
();
();
}
return packnames;
}
}
程序锁功能
此模块通过监听任务栈的启动程序,并判断任务栈的第一个程序是否为数据库中
保存需要添加程序锁的程序,判断为正确的话,当此程序打开时候会预先跳出一个界面,
要求用户输入密码或者其他方式通过权限才可以进入程序。具体代码实现如下:
public void onCreate() {
();
(TAG);
daos = new AppLockDao(this);// 得到所有的要锁定的应用程序
flag = true;
dog2lockscreenlintent = new Intent(this,);
(_ACTIVITY_NEW_TASK);
manage=(ActivityManager) getSystemService(_SERVICE);
new Thread(){
@Override
public void run() {
while(flag){
try {
info= (1);
RunningTaskInfo appinfo = (0);
String packname = ();
(packname);
if((packname)){
("需要锁定程序包名"+packname);
("packname", packname);
startActivity(dog2lockscreenlintent);//当确定是需要程序
锁的时候,跳入LockScreenActivity,为程序的打开之前添加一个
锁
}else{
("不需要关注的程序"+packname);
}
sleep(1000);
} catch (Exception e) {
();
}
}
}
}.start();
}
DES 加密解密算法实现
通过 DES 算法对用户的私人信息进行加密解密,实现代码如下:
public class DES {
private static byte[] iv = {1,2,3,4,5,6,7,8};
public static String encryptDES(String encryptString, String encryptKey) throws Exception {
// IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);
IvParameterSpec zeroIv = new IvParameterSpec(iv);
SecretKeySpec key = new SecretKeySpec((), "DES");
Cipher cipher = ("DES/CBC/PKCS5Padding");
(_MODE, key, zeroIv);
byte[] encryptedData = (());
return (encryptedData);
}
public static String decryptDES(String decryptString, String decryptKey) throws Exception {
byte[] byteMi = new Base64().decode(decryptString);
IvParameterSpec zeroIv = new IvParameterSpec(iv);
// IvParameterSpec zeroIv = new IvParameterSpec(new byte[8]);
SecretKeySpec key = new SecretKeySpec((), "DES");
Cipher cipher = ("DES/CBC/PKCS5Padding");
(_MODE, key, zeroIv);
byte decryptedData[] = (byteMi);
return new String(decryptedData);
}
}
xml 保存私人信息
通过后台服务,对私人信息进行保存,加密解密操作,实现代码如下:
public void onCreate() {
smsInfoService = new SmsInfoService(this);
();
new Thread(){
@Override
public void run() {
try {
List<SmsInfo> smsinfos = ();
= new File("/sdcard/");
XmlSerializer serializer = ();
os = new (file);
(os, "utf-8");
("utf-8", true);
(null, "smss");
(null, "count");
(()+"");
(null, "count");
for(SmsInfo info : smsinfos){
(null, "sms");
(null, "id");
(());
(null, "id");
(null, "address");
(());
(null, "address");
(null, "date");
(());
(null, "date");
(null, "type");
(()+"");
(null, "type");
(null, "body");
(());
(null, "body");
(null, "sms");
}
(null, "smss");
();
//把文件缓冲区的数据写出去
();
();
();
(getApplicationContext(), "保存ing", 1).show();
();
} catch (Exception e) {
();
();
(getApplicationContext(), "失败", 1).show();
();
}
}
4 功能演示
配置虚拟机
开启 android 虚拟机,尺寸为 ,分辨率为 320x480,ram 设置为 512,android target
为 android - API Level 8。
程序锁
把项目安装到虚拟机上面运行效果如下图显示:
通过点击程序名字来选择加锁的程序,而被加锁的程序在被打开的时候需要输入密
码来获得权限才可以进入程序,如上图闹钟已经被加锁,当打开闹钟的时候则会如下面
所示:
输入密码后就可以进入闹钟程序。
加密解密
为用户的私人信息加密解密,比如当用户加密短信之后,并且打开程序锁为短信加
多一个程序锁功能,则在用户输入正确的密码后,才能解密,不然就算通过其他手段得
到了 android 里面短信的数据库,打开也是被加密过的密文。演示如下:
通过虚拟机发送和接收短信,通过查开 android 内部的 数据库可以看到:
导出该数据库之后用 SQLite Expert Personal 3 打开可以看到下图:
打开 sms 表可以看到短信内容,如下图所示:
Address 为联系人号码,body 为短信内容。
通过 DES 加密之后可以号码和短信内容都加密了,同样,我们打开 android 关于短
信息的数据库 ,可以看到:
内部的数据库内容也被加密了。
当通过验证权限之后,打开短信息,就可以看到解密之后的短信是和原来的一样
结论
通过对本系统进行的多次的测试,系统正确实现了对程序加锁,对私人信息加密,
实现了用户对私人信息的保护。在测试过程中对程序细节上出现的漏洞进行修补,系统
运行的稳定性基本达到要求,运行结果比较良好。在整个工程的构思方面还存在着不足,
这些问题还需要今后逐一解决。与此同时,这个软件还可以进一步扩展,带给用户更好
的体验与生活的便捷。
在系统开发过程中,对 Android 的学习比想象的要困难的多,为了在短时间内投入
到开发,完成系统。需要大量的时间去学习,我在图书馆借阅了相关开发的书籍,照着
上面去学习,以最快的速度学习 Android,掌握开发中的各种控件的使用。本文主要研
究了 Android 平台的架构以及在 Android 平台上手机通讯录功能的实现。
本文在 Android 平台以及在该平台上开发手机通讯录上做了大量的工作,但因个人
能力有限,还有很多问题需要实现和解决,现对未来可以进行的工作做出以下几点展望:
(1)本文实现的加密解密是基于 Android 平台进行开发的,但是还未能真正解析 Androi
d 的精髓,系统的界面设计也不是很完善,对 Android 平台进一步研究能够使系统在设
计方面更加快捷和完善。
(2)本文所开发的系统目前还只是在模拟器上进行运行,还有待移植到真机上进行进
一步研究。相信随着研究的进一步深入,这些问题会逐步得到解决,相信基于 Android
程序锁类和加密应用软件会有很好的应用前景。
这次系统的开发对我来说是一个挑战,对于从来没接触过 Android 的我经过努力,
现在程序运行良好,基本功能得以实现。这一次的系统开发让我受益匪浅,我相信它会
对我以后的人生和工作都起到很好的促进作用,有着积极的影响。
参考文献
[1] 靳岩, 姚尚朗. Google Android 开发入门与实战[M]. 北京: 人民邮电出版社, 2009:
1-12
[2] 景保玉. 2010 中国移动应用开发现状与趋势大调查[M]. 北京: 人民邮电出版社, 2011:
2-19
[3] (英)Herbert 参考大全[M]. 北京: 清华大学出版社, 2008: 9-11
[4] 高昂. 支持动态语言的 Android 平台[M]. 北京: 人民邮电出版社, 2009: 5-7
[5] 郭志宏. Android 应用开发详解[M]. 北京: 电子工业出版社, 2010: 6-21
[6] 韩超, 梁泉. Android 系统开发原理及开发要点详解[M]. 北京: 电子工业出版社, 2010:
1-11
[7] 李宁. Android/OPhone 开发完全讲义[M/CD]. 北京: 水利水电出版社, 2010: 6-19
[8] 余志龙. Google Android SDK 开发范例大全(第 2 版)[M]. 北京: 人民邮电出版社, 201
0: 6-6
[9] 公磊, 周聪. Android 的移动应用终端应用程序开发与研究[J]. 南昌: 计算机与现代
化, 2008: 8: 85-89
[10] 高焕堂. Android 应用框架原理与程式设计 36 技[M]. Google 公司, 2008: 2-22
[11] (英)梅尔. Android 2 高级编程(第 2 版)[M]. 北京: 清华大学出版社, 2010: 12-12
[12] and themes of human-robot interaction: A
growing research field[J]. Apress:International Journal of Advanced Robotic Syste
ms, 2007: 103-108
[13] Mehran Sahami. Programming Methodology[M]. Apress:the Expert’s Voice,
2008: 4-12
致 谢
从论文选题到搜集资料,从开始写代码到反复修改,期间经历了喜悦、聒噪、痛苦
和彷徨,在写作论文的过程中心情是如此复杂。如今,伴随着这篇毕业论文的成稿,复
杂的心情烟消云散,自己甚至还有一点成就感。
“不积跬步无以至千里”,这次毕业论文能够最终顺利完成,归功于各位老师四年来
的认真负责,使我能够很好的掌握专业知识,并在毕业论文中得以体现。也正是你们长
期不懈的支持和帮助才使得我的毕业论文最终顺利完成。同时我还要感谢我身边的朋友
同学还有实验室的师兄师姐,在我碰到问题的时候,毫不犹豫的伸出援助之手。在这里
表示衷心的感谢。
在这次设计和撰写设计论文过程中,特别感谢我的指导老师——谭台哲老师,战荫
伟老师,赵锐老师在本系统开发过程中,老师们给予我悉心的教导,在我遇到问题时,
给予了我宝贵的指导意见,使我能够克服重重困难,最终顺利的完成本设计,我在此向
各位老师们表示崇高的敬意和衷心的感谢。
最后再次感谢培育我四年的母校以及所有老师,我将会把这份宝贵的记忆永留心中,
永远不会忘记!