1.移动智能终端加密通信软件现状分析
随着移动智能终端的在日常生活、工作学习等领域的广泛使用,在移动智能终端上存储的文件和个人信息也随之越来越多,虽然针对移动智能终端本地文件的加密软件很多,如:“私密保险箱”、“智能应用锁”、“文件加密大师”等,这些加密软件主要用于本地文件的加密,如:短信、文件、照片、视频、文件夹等,但目前传输软件能具备加密功能的相对较少。这就给不法分子提供了窃取文件的机会,并且窃取的是未经加密的明文文件,因此对用户利益造成了损失。针对上述问题,在文件传输过程中,如何对文件进行加密传输显得尤为重要。文中移动智能终端以手机为例进行描述。
2. AES算法
在密码学中,加密算法分为双向加密和单向加密。单向加密包括MD5、SHA等摘要算法,它们是不可逆的。双向加密包括对称加密和非对称加密,对称加密包括AES加密、DES加密等。双向加密是可逆的,存在密文的密钥。AES算法是DES算法的替代者,也是现在最流行的加密算法之一,比如:微信小程序加密传输。AES 是一个迭代的、对称密钥分组的密码,支持128、192 和 256 位三种长度的密钥,并且用 128 位(16字节)分组加密和解密数据,对应轮数为:10,12,14。常见的AES128,AES192,AES256,实际上是指AES算法对不同长度密钥的使用。
3.面向移动智能终端的文本加密通信软件
该通信软件包括加密/解密模块和蓝牙通信两个模块,其中加/解密模块采用AES加密算法,能够安全有效地为用户提供手机文件加密服务,以文件数据分组加密的方法完成对文件的加密。加/解密模块是该应用软件的核心模块,用于完成对文件的加密和解密功能。蓝牙通信模块完成设备间建立连接并进行文件传输的功能。开发平台采用Android平台,它具有完整、开源、免费等优点,是现在最流行的手机开发平台之一。开发环境采用Eclipse+Android SDK;开发语言采用Java。
3.1 加/解密模块设计
针对现状分析,文中的移动智能终端加/解密软件主要由四个模块组成:文件选择模块、加/解密模块,文件读写模块和密钥设置模块。用户通过文件选择模块对选择需要加/解密的文件,在利用密钥设计模块进行密钥的输入,文件读写模块负责对明文、密文文件进行读取与写入存储,加/解密模块利用AES算法对文件进行加密与解密。
(1)文件选择模块。文件选择模块是加/解密的第一步,用户通过此模块选择需要进行加密或解密的文件。该模块将Android手机SD卡上的文件遍历到一个Application上,用户可以手动选择需要进行操作的文件。通过用户的自我选择,软件确定需要操作的文件,将文件的路径名传输到加/解密模块里,同时给文件读写模块提供路径。
(2)加/解密模块。文件加密解密模块在文件选择模块提供路径的前提下,文件读写模块共同发挥作用完成对文件的加密与解密。如果采用AES128,则采用128 位(16字节)分组加密和解密数据,因此需要对文件进行10轮的加/解密。在实现对文件的AES加/解密时,具体步骤如下:
① 文件读取模块传输文件数据。
② 设置密钥。
③ 按照128位对待加/解密文件进行标记。
④ 将取出的数据放入中间变量中。
⑤ 对密钥的长度进行判断。
⑥ 根据不同密钥长度用不同加密方法对数据进行加/解密。
⑦ 加/解密后保存到中间变量中。
⑧ 将中间变量的数据写入新创建的密文或明文文件。
(3)密钥设置模块。该模块主要是对密钥进行设置。密钥设置分为手动输入与自动随机生成两种。手动输入则是用户通过手机虚拟键盘输入密钥,可以是任何长度,手动输入后软件会自己辨别长度与补充长度不足的密钥。自动生成只需要用户选择需要的生成密钥的长度,软件通过随机函数自动生成符合条件的密钥。加密文件时密钥可以手动输入也可以自动生成,但加密文件时必须是手动输入正确密钥。无论是手动输入密钥还是自动生成密钥。用户必须牢记密钥,这是正确进行加/解密的前提。且在加密传输过后,需将密钥提供给文件接收方。
(4)文件读写模块。该模块主要是对手机SD卡目录上的文件进行读取和写入的操作,当用户开始加密或解密操作时,表示该模块开始工作,主要是进行文件存储设备与加/解密模块之间的数据传输。文件读写模块支撑加/解密模块完成对文件加/解密。在加/解密开始前,将手机SD卡上用户选择的文件以文本的形式读取。在加/解密时,将创建一个新文件作为密/明文文件,且在加/解密过程中负责写入密/明文文件。新文件文件名在原文件文件名前做密文/明文标记。
3.2 基于蓝牙通信的文本加/解密软件传输设计
(1) 蓝牙通信过程
蓝牙技术是为固定设备或移动设备之间的通信环境建立通用的近距无线接口,将通信技术与计算机技术进一步结合起来,使各种设备在没有电线或电缆相互连接的情况下,能在近距离范围内实现相互通信或操作。其蓝牙通信软件是通过利用 Android 平台提供的蓝牙 API 进行实现蓝牙设备之间的通信。因此,当两台蓝牙设备需要通信交互时,首先进行 Bluetooth配对,配对连接成功后,进行数据传输。即蓝牙通信过程主要包括三个步骤:查询蓝牙、配对蓝牙、连接蓝牙。
(2) 服务器与客户端的传输设计
蓝牙通信基于通用连接框架,对不同客户端而言,需要通过搜索来获得与服务端的连接信息。蓝牙服务端使用连接通知者对象,用于等待远程设备的连接,类似于阻塞式 socket 服务端,它将一直等待直到接收到客户端的连接请求。对于蓝牙客户端的搜索服务分为设备搜索和服务搜索,后者需要基于指定的远程设备才能进行。客户端和服务器端在获得蓝牙协议连接后,通过连接创建输入/输出流来进行通信。
① 服务器的设计
当使用手机作为服务器时。软件检测蓝牙是否开启,是否可以被别的设备检测到。然后将蓝牙设置为开启,可被检测到。然后服务器端就开始等待客户端的连接,当建立连接后就可以进行文件传输了。作为服务器拥有BluetoothServerSocket,作用是侦听进来的连接,在连接接受时返回一个BluetoothSocket对象。这时BluetoothServerSocket可以丢弃了。建立连接基本步骤如下:
a.与客户端建立连接后,使用文件输入输出流就可以进行文件得到一个BluetoothServerSocket对象,在获得中UUID非常重要。当客户端试图连接时,这是唯一标识。UUID必须匹配才能建立连接。
b.侦听连接请求。直到连接到UUID匹配的客户端。返回一个BluetoothSocket对象。
c.连接成功,调用close,释放Server Socket。BluetoothSocket对象不会被关闭。
② 客户端的设计
客户端需要打开手机蓝牙。与服务器建立蓝牙连接,然后进行文件传输。为实现与服务器的连接,要获得一个代表服务器的BluetoothDevice对象。并使用其获得BluetoothSocket用来建立连接。在UUID相匹配的前提下,建立连接分为两步,首先使用BluetoothDevice调用方法creatRfcommSocketToSeviceRecord(UUID)获取一个BluetoothSocket对象;然后调用connect()建立连接。
4. 面向移动智能终端的文本加密通信软件的实现
(1) 对文件分组加/解密的实现
文件都是以文本的方式存储的,所以对文件进行加密解密时与文本不一样的地方就是不能一次性加密到位,只能通过数据分组的方式加密。代码实现如下:
InputStream fis = null;
OutputStream fos = null;
try {
fis = new BufferedInputStream(new FileInputStream(ptFile));
fos = new BufferedOutputStream(new FileOutputStream(secretFile));
byte[] buffer = new byte[16];
byte[] ct = new byte[16];
int i = 0;
long b = 0L;
b = ptFile.length();
if (b % 16L == 0L) {
b = b;
}
else {
b = b / 16L * 16L + 16L;
}
myAes aes = new myAes(keyBytes, keyBytes.length * 8);
byte[][] keyExpand = aes.getW();
byte[] w1 = (byte[])null;
String StringKey = null;
for (int j = 0; j < keyExpand.length; j++) {
w1 = keyExpand[j];}
while ((i = fis.read(buffer)) != -1) {
if (i == 16)
{aes.encrypt(buffer, ct);
fos.write(ct, 0, 16); }
else
{for (int j = i; j < 16; j++) {
buffer[j] = 0; }
aes.encrypt(buffer, ct);
fos.write(ct, 0, 16); }
fos.flush();
fos.close();
fis.close();
}
将文件以文件流的方式写入缓存,然后16字节分组加密,然后将加密后的数据写入密文。这样就实现了对文件进行AES加密。解密过程调用解密算法,其他与加密相同,代码不再赘述。
(2) 蓝牙通信的实现
① 开启蓝牙
开启蓝牙是文件传输首要的操作。当系统的蓝牙处于关闭状态下时。需要先开启蓝牙才能进行下一步操作。关键代码如下:
private BluetoothAdapter bluetooth=BluetoothAdapter.getDefaultAdapter();
bluetooth.enable();
Intent discoveryIntent = new Intent(bluetooth.ACTION_REQUEST_DISCOVERABLE);
discoveryIntent.putExtra(bluetooth.EXTRA_DISCOVERABLE_DURATION, 300);
② 搜索可用设备
使用BluetoothAdapter的startDiscovery()方法来搜索蓝牙设备,实现代码如下:
public void onClick(View v) {
unbondDevices.clear();
bondDevices.clear();
Log.v("调试", "开始搜索");
setTitle("本机蓝牙地址:" + bluetooth.getAddress());
bluetooth.startDiscovery();}
③ 创建蓝牙Socket,获取输入输出流,读写数据
当两个设备在同一个RFCOMM channel下分别拥有一个连接的BluetoothSocket,这两个设备才算建立了连接。
服务器设备通过accepted一个incomingconnection来获取,客户端通过打开一个到服务器的RFCOMM channel来获取。获取后就建立了蓝牙Socket连接。
通过BluetoothSocket的getInputStream()和getOutputStream()方法获取文件输入输出流。
读写数据使用read(bytes[])和write(bytes[])方法实现。
④ 加/解密结果
加/解密结果如图4-1所示。
图(a)密文文件 图(b)解密后明文文件
图4-1 文件选择
小结:
基于AES算法,设计并实现了Andriod系统中对文件进行加/解密,并可以通过蓝牙建立连接进行文件传输。采用AES对文件进行加密,可保证文件不会被破解。采用端到端的文件传输,可以有效的保证通信信息的安全性和可靠性,抵抗数据篡改、窃听等攻击。用户的信息在一端经过加密后以密文的形式传输至通信的另一端,在加密数据到达另一端的用户之前不进行任何的解密操作,因此如果通信网络中某些节点被侵入,也不会造成信息泄露,保证了用户信息的安全性。
参考文献:
[1] 赖幸君,林达宜.蓝牙技术在测控系统中的发展应用研究[J].数字通信世界,2023(04):92-93.
[2] 王毅,李兆伟.基于手机的RGB高亮度发光LED灯色彩无线控制系统[J].新型工业化,2020,10(09):75-81.
[3] 赵敏涯.基于Android的蓝牙全双工通信技术研究与实践[J].无线互联科技,2023,20(01):8-10.
[4] 赵中军,杨阳,杨兴等.基于AES加密算法的数据库透明加解密系统的设计与实现[J].通信技术,2023,56(03):377-382.
[5] 安聪. 基于AES加密算法的侧信道攻击的研究[D].南京邮电大学,2022.
作者简介:向阳霞(1981-),女,汉族, 湖南省常德人,讲师,硕士,主要研究方向为大数据、信息安全。