SQLite数据库在Android平台下的加密设计

2020-06-11 13:46汪坤
电子技术与软件工程 2020年3期
关键词:加密算法密钥消息

汪坤

(沈阳化工大学 辽宁省沈阳市 110000)

如今Android手机已经是人们生活中必不可少的移动设备,作为一款嵌入式数据库,SQLite在其数据存储方面发挥了巨大作用,几乎所有的软件App都离不开SQLite数据库保存用户关键数据,SQLite数据库用来作为Android平台本地存储的主要方式,其安全性的强弱显得尤为重要[1],但其本身却没有很好的加密措施,任意使用者在获取数据库文件后就能够明文查看信息。本人在开发本校留学生管理App过程中有许多需要通过网络传输的信息提供给学生,并使用SQLite保存学生信息,因此数据的安全保密工作成为了最为重要的一个环节,故此研究并设计Android系统下的数据库保密措施,目的能够解决学生信息的存储安全问题。

1 SQLite数据库简介

SQLite数据库基于嵌入式系统,它是一个轻量级的关系数据库数据库,故此大家都称之为“袖珍型数据库”,其广泛的用于移动嵌入式系统中,是开源的、轻量级的、与操作系统毫无关系。它的设计初衷在于占用极小的资源,发挥最大的作用价值。在移动设备中它可能只需要仅仅数百KB即可存储用户所需的所有信息,存储最大值尽然能够达到2TB。在Android系统下,还可以通过封装的API执行读取和存储操作。SQLite支持NULL(空置),INTERGER(整形),REAL(浮点型),TEXT(字符串文本型)和BLOB(二进制对象型)数据类型。表面上它仅支持这五种数据类型的存储,但对于诸如Varchar,Char,Decimal等之类的数据类型,它也可以通过转换类型成为接收对象,并以单个文件的形式进行存储。因此,SQLite的最大特点是它可以通过转换将任何类型的数据保存到任何字段中也称‘动态存储’。另外,尽管它很袖珍,但由于它是基于嵌入式的数据库,其受支持的SQL语句并不逊色于其他开源数据库,甚至在某些方面远胜于传统数据库,它的发展前景更是一片大好。

2 SQLite数据库在Android下的使用

(1)Android提供SQLiteOpenHelper.java抽象类,使用它必须先写一个类继承它。

public class DatabaseHelper extends SQLiteOpenHelper{}

(2)然后再写一个带全部参数的DatabaseHelper类的构造函数。

public DatabaseHelper(Context context,String name,CursorFactory factory,int version) {super(context,name,factory,version); }

(3)再写两个继承于抽象类SQLiteOpenHelper中抽象方法:onCreate和onUpgrade方法。

图1:test01数据库表

图2:MD5算法流程

(4)然后就可在主方法写入增删改查操作,SQLite专门提供了此类Content Value。

如图1所示,以下实验本人在Win10系统下,使用MI3真机,4.4.4KTU84P的Android版本下进行。首先在Android平台下创建了一个TEST.db的数据库,表名为test01,具体如下:

CREATE TABLE test01 (id INTEGER PRIMARY KEY AUTOINCREMENT,name varchar(50),password varchar(50))

在以下测试对学生的密码进行加密实验,设置初始密码为“123456”。

表1:RSA算法原理

表2:加密比较

图3:MD5加密结果

图4:SHA加密结果

图5:AES流程

图6:AES加密结果

图7:RSA加密结果

3 加密方式

3.1 MD5算法(单向加密)

MD5(Message-Digest Algorithm)也称为是消息-概要算法,MD5在市面上主要是用来确保信息在传输过程中的完整性和可靠性。MD5的作用是允许在使用数字签名软件对私钥进行签名之前将大容量信息“压缩”为机密格式(即将任意长度的字节字符串转换为一定长度的十六进制数字字符串)。MD5可以说是现如今计算机网络中比较普遍使用的哈希算法(也叫散列算法)了,它是一种单向加密的过程,只能加密,不能解密(目前市面上非法的暴力破解法还是存在能够破解的现象)。它的主要处理过程是把消息经过一系列的运算操作都可以转化为另一固定长度的值。其主要流程有三步:第一步数据填充,第二部添加消息长度,第三步进行数据处理。也就是不管你的消息是什么样子,它必能够将此消息运算成为一个定值,然后存到数据库保存或发送。其运算流程如图2所示。

MD算法具有以下特性,易于计算:运算流程清晰,思路明确,使用运算流程很容易从原始数据计算MD5值。不可修改性:对原始信息数据的任何更改,乃至仅仅修改了一个字节,获得的MD5值也大不相同。防伪造性:知道原始数据及其MD5值,很难找到具有相同MD5值的数据,难以做到伪数据。可压缩性:任意不定长度的信息数据,经过一系列的运算所得出的MD5值的长度是固定的。强大的抗冲突性:无法找到两个不同的数据共同拥有一个相同的MD5值。

对SQLite数据库加密实验结果如图3所示。

3.2 SHA加密

SHA算法,安全哈希算法(Secure Hash Algorithm)主要适用于数字签名标准(DSS)中定义的数字签名算法(DSA)。其原理也就是在消息长度一定时,SHA会通过运算生成一段概述来表示这些信息数据,因此又叫消息摘要算法,该算法第一步是接收一段纯文本,然后以不可逆转的方式将其转换为(通常较小的)密文文本,也可以简单地理解为获取一串输入代码(称为预映射或信息),并将其转换为较短的固定位输出序列,输出的序列值是散列函数也称之为哈希值。哈希函数值可以说是明文的“引言”或“摘要”,因此哈希值的数字签名可以视为明文的数字签名。SHA和MD5是相似的,因为它们都是从MD派生的,它们的强度和其他特性是相似的,但是还有以下的区别:

(1)对暴力攻击的安全性:最重要和最重要的区别是,SHA比MD5摘要更长。使用强制技术,生成其摘要等于给定摘要的任何消息的困难在于按MD5顺序进行操作和按SHA顺序进行操作。这样,SHA可以抵抗强力攻击。

(2)密码分析的安全性:由于MD5的设计,它很容易受到密码分析攻击的攻击。SHA-似乎不太容易受到此类攻击。

(3)速度:在相同的硬件设备上,SHA的运行速度比MD5稍慢。对SQLite数据库加密实验结果如图4所示。

3.3 AES加密

AES(Advanced Encryption Standard)高级加密标准是一种块加密标准。该标准用于代替原始DES(数据加密标准),该标准已被许多各方分析并在全球范围内广泛使用。替换DES的原因是DES使用56位密钥并且更容易破解。AES可以使用128位,192位和256位密钥,并使用128位块对数据进行加密和解密,这是相对安全的。除非使用穷尽的方法列举,否则理论上无法破解完美的加密算法。使用穷举法来破解密钥长度超过128位的加密数据是不现实的,只有理论上的可能性。据现有统计数据表明,即使使用世界上最快的计算机,耗尽128位密钥也要花费数十亿年,更不用说破解256位密钥长度的AES算法了。AES在日常生活中应用比较广泛因为其原理比较简单易于操作,但是由于密钥可能会被盗取,因此也存在一定安全性问题[2]。AES加密算法流程如图5所示。

对SQLite数据库加密结果如图6所示。

3.4 RSA加密

RSA是最流行的非对称加密算法之一,也称为公共密钥加密。RSA是非对称加密的算法,也就是说,用于加密的密钥和用于解密的密钥是不同的。像DES一样,RSA也是一种块加密算法,区别在于可以根据密钥的大小更改块大小。如果加密数据不是数据包大小的整数倍,则将根据特定应用添加其他填充位。RSA作为一种非对称加密算法,最重要的一个特性是当信息数据在网络中传输时,用于加密数据的密钥不需要与数据一起传输,单独用户进行留存,因此,这一过程极大降低了密钥泄漏的可能性,也降低了信息数据泄露的风险性,用户保存了私钥也就保护了自己的隐私。此外,由于缺少解决大型数据得的有效方法,RSA生成的密钥多的达到200多位,可以推测当前市面没有破解RSA的有效方法。RSA优缺点在于它的安全性能不错,任何用户一方只需要保管一对密钥就可以了,这是RSA的优点;但是它的计算复杂运算导致运行速度慢,对于大型数据加密起来比较吃力,这是比较大的缺点。

RSA算法基于的原理流程就是一方获得消息并提取摘要,通过本地私钥加密形成签名密文s,将消息密文及消息通过另一方的公钥加密生成另一段密文c发送给另一方,另一方使用自己的私钥解密c得到与消息,再使用自己得公钥解密得到一个摘要H,并和自己得到的消息取到得摘要h进行比对,若一致则加密解密通过,传送完成。其具体运算流程有如表1所示。

对SQLite数据库实现加密结果如图7所示。

4 结论

以上四种加密方法分析以及再Android设备上进行编程实验并测得耗时进行对比,如表2所示。

MD5和SHA加密算法是散列的单向加密,其过程是不可逆的,可以用于身份验证,可是用来保存数据的话,虽然加密耗时极短,但是不能够很好的读取到用户信息,因此不适合在移动平台上保存数据,但可以考虑在本人APP设计中登陆模块上使用进行数据比对,达到成功登陆的目的且耗时最短。RSA是如今比较普遍应用的加密方法了,其安全性也是相当高,但是从实验来看,其加密耗时偏高,在移动平台上考虑到可能会影响用户的舒适感,因从在本人的APP开发中,选择相对比较安全的AES加密算法用来对Android数据库加密才是最适合的。

猜你喜欢
加密算法密钥消息
探索企业创新密钥
密码系统中密钥的状态与保护*
一种对称密钥的密钥管理方法及系统
基于ECC的智能家居密钥管理机制的实现
基于小波变换和混沌映射的图像加密算法
Hill加密算法的改进
消息
消息
消息
对称加密算法RC5的架构设计与电路实现