给手机短信加密可以保证信息不被非法窃取和篡改,而且只有合法接收方才能知道短信内容,作为手机操作平台之一的Android系统的用户使用率相当高,这一平台以Linux为核心,可以使用Java作为编程语言来开发应用程序,那么我们今天就来给大家介绍一下android手机短信加密是如何通过java语言实现的。

一、Android操作系统

Android系统于2007年在美国推出后,凭借其良好的用户体验、低廉的成本和较高的开放性吸引着越来越多的终端厂商采用。Android系统架构由五部分组成,分别是LinuxKernel、Android Runtime、Libraries、Application Framework和Applications。如图1所示。

因本文所涉及的手机短信加密软件为应用层面,在此主要介绍Android Runtime和Applications版块。

1、Android Runtime

Android包含一个核心库的集合,提供大部分在Java编程语言核心类库中可用的功能。每一个Android应用程序是Dalvik虚拟机中的实例,运行在他们自己的进程中。Dalvik虚拟棚被设计成在一个设备可以高效地运行多个虚扬机实例。Dalvik虚拟机可执行文件格式是.dex,dex格式是专为Dalvik设计的一种压缩格式,超合内存和处理器速度有限的系统。大多数虚扬机包括JVM都是基于栈的,而Dalvik虚拟机则是基于寄存器的。两种架构各有优劣,一般而言,基于栈的机器需要更多指令,而基于寄存器的秒器指令更大。Android系统提供了dx工具,可以将Java.class转换成.dex格式。一个dex文件通常会有多个.class。由于dex有时必须进行最任化,会使文件大小增加1~4倍,以ODEX结尾。Dalvik虚拟机依赖于Linux内核提供基本功能,如线程和底层内存管理。

2、Applications

Android装配一个核心应用程序集合,包括电子邮件客户端- SMS程序、日历、地图、浏览器、联系人和其他设置。所有应用程序都是用Java编程语言写的。从上进内容可以清楚地知道Android的架构是分层的,非常清晰,分工明确。Android本身是一套软件堆迭(SoftwareStock),或称为软件迭层架构,迭层主要分成三层:操作系统、中间件、应用程序。

二、Eclipse开发平台简介

Eclipse是一种基于Java的可扩展开源开发平台。就其自身而雷,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse附带了一个标准的插件集,包括为人熟知的Java开发工具(Java Developme nlTools,JDT)。

虽然大多数用户很乐于将Eclipse当做Java集成开发环境(IDE)来使用,但Eclipse的目标却不仅限于此。Eclipse还包括插件开发研境(Plug-in Development Environment,HDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。由于Eclipse中的每样东西都是插件,对于给Eclipse提供插件,以及给用户提取一致和统一的集成开发环境而雷,所有工具开发人员都具有同等的发挥场所。

这种平等和一致性并不仅限于Java开发工具。尽管Eclipse是使用Java语言开发的,但它的用途并不限于Java语言。例如,支持诸如C/C++和COBOL等编程语言的插件已经可用,或预计将会推出o Eclipse框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。

基于Echpse的应用程序的突出例子是IBM&reg-Rational&reg、Software Architect,它构成了IBM Java开发工具系列的基础。

三、基于Java语言实现手机短信的3DES加密

1、DES加密算法流程

DES算法是IBM设计并于1977年被美国国家标准局采用的数据加密标准,它通过循环和迭代将简单的基本运算和变换构造成数据流的非线性变换来实现对数据的加密保护。

作为一种对称加密算法,DES利用56位的密钥将64位的二进制信息加密成64位的密文信息,加密后的信息可用加密时用的同一密钥边行求逆得到对应的明文。DES算法的加密过程如图2所示。

由图2可知,在DES加密过程中,它的主体运算由初始置换、乘积变换和逆初始置换组成。

(1)初始置换IP

初始置换方法就是将64位明文的位置按照一个固定的表的顺序打乱,表中的数字代表64位明文的输入顺序号,表中的位置代表置换后的输出顺序,其中表中的位置顺序是先按行后按列进行排序的。

(2)乘积变换(16轮迭代)

乘积变换部分要进行16轮迭代,首先将初始置换得到的64位结果分为两半,记为L0和Ro,各32位。对初始密钥进行密钥扩展,产生16个48位的子密钥,记为K1,K2...,KL6,每轮迭代的逻辑关系为:

其中1<i<16,其一轮迭代过程如图3所示。

乘积变换的核心是f变换,它是非线性的,是每轮实现混乱的最关键的模块,其详细变换过程即图3中的虚线部分。具体为输入32位,经过扩展变换变成48位,与子密钥进行异或运算,选择压缩变换-S盒替换,将48位压缩还原成32位,再进行P盒替换,输出32位。

(3)逆初始置换IP-1

逆初始置换IP-1与初始置换正好相反,它将通过16轮迭代后产生的64位比特信息按照另一个固定的表的顺序打乱,最后输出的64位信息即为密文信息。

2、3DES加密解密处理方案

由于DES算法存在密钥位数和迭代次数偏少等问题,人们提出了多重DES来克服这些缺陷,其中3- DES为实际应用中被广泛采用阿方案。它有以下4种使用模式:

(1) DES-EEE3模式:使用三个不同密钥(KL,K2,K3),采用三次加密算法;

(2) DES-EDE3模式:使用三个不同密钥(KL,K2,K3),采用加密一解密一加密算法;

(3) DES-EEE2模式:使用两个不同密钥(KI=K3,K2),采用三次加密算法;

(4) DES-EDE2模式:使用两个不同密钥(KL=K3,K2),采用加密一解密一加密算法。

3DES将密钥长度增加到112位或168位,抗穷举的能力大大增强,是目前仍被使用的加密算法。

一般来说,手机短信内容较短,可以选用3DES算法进行加密,本文选用其中一种模式作为手机短信加密解决方案。

3、Android的消息处理机制

基于Android系统的手机游戏程序开发过程,分析了Android系统的安全机制。下面着重介绍Android系统的消息处理机制,因为这是手机短信加密的基础。

首先通过Handler发出一条消息,发至MessageQueue里,调用MessageQueue能enqu eueMessage函数,enqueueMessage根据上面接收的Messag e队列的构造把接收到的Message放入队列中。MessageQueue的removeMes sag es函数根据上面接收能Message队列的构造把接收到的Message膨队列中删除,并且调用对应Messag e对象从recycle函数把不用的Message放入MessagelH001中。通过Loop从Message Queue中从前往后取出Message,然后通过Han dlerWdispat chMessage函数进行消息的处理(可见消息的处理是Handler负责的)。消息处理完了以后通过Message对象的recycle函数放到MessagePo01中,以便下次使用,通过Po01的处理提供了一定的内存管理从而加速消息对象的获取。Pool如何处理取决于Handler如何定义(三个方法一一优先级从高到低:fMessage里面的Callback,一个实现了Runnable接收的对象,其中run函数做处理工作;Handler里面的mCallback指向的一个实现了Callback接口的对象,里面的handleMessage进行处理;处理消息Handler对象对应的类继承并实现了其中hand leMessage函数,通过这个实现能handleMessage函数处理消息)。

大致流程就是Handlery发送Message→MessageQueue,Looper从MessageQueue中取出Message号触发Handler的消息分发函数专调用Handler中定义的方法。

SMS是手机中经常使用到的一个服务。然而当手机接收到短信时,也会向系统发途广播o An droid中收到系统消息广播后,需要从以下三个步骤处理这个系统消息广播:

(1)接收系统消息广播;

(2)处理系统消息广播:

(3)把消息广播里面的内容显示在Activity中。

通过SMSReceiver类接收系统广播,在编写SMSReceiver类的时候需要注意以下四点:

(1)接收短信的Broadcast Action是android.provider.Tele phony,SMS_RECEIVED,因此,要在onReceiver方法的开始部分判断接帐到的是否是接收短信的BroadcastAction。

(2)需要通过Bundle.get(“pdus”)来获得接收到的短信息。这个方法返回了一个表示短信内容的数组,每一个数组元素表示一条短信。这就意味着通过Bundle.get(“pdus”)可以返回多条系统接收到的短信内容。

(3)通过Bundle.get(“pdus”)返回能数组一般不能直接使用,需要使用SmsM essage,creatFro mPdu方法将这这些数组元素转换威SmsMessage对象才可以使用。每一个对象表示一条短信。

(4)通过SmsMessage类的get DisplayOriginating Address方法可以获得发途短信的电话号码,通过getDisplay Message Body办法可以获得短信的内容。

软件开发采用Java语言,利用Eclipse编程工具,以Android SDK开发包为基础来实现SMS收发功能。

四、软件运行界面截图

在Android虚拟手机开发平台上,通过编写短信加密解密程序,模拟实现该加解密程序在真实手机环境中的运行效果。下面是该程序在手机虚拟平台的运行结果。

(1)打开手机连接电脑,在虚拟平台上出现初始界面,如图4所示。

(2)点击图4中“信息”进入短信收发界面,如图5-图6所示。

(3)运行J2MEMIDlet程序,直接点击图5下消息编辑条进入短信编辑劫如图7所示。选择联系人界面,在短信内容编辑结束后进行选择产如图8所示。

(4)目标手机短信接收界面,可对刚接收的短信进行编辑、解密等操作,具体按钮如图9所示。至此,双方通信结束。

本软件针对Android手机开发,故只适用于Android手机用户,很难直接移植到其他系统。在实际的软件开发中,3DES的加密密钥则由Java函数随机生成,因此,用户没有直接输入加密密钥,在使用时跟普通的手机一样。当然,只有通信双方的手机同时安装加密软件才具有正常的短信收发功能。

小知识之Android

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发。