Sqlite数据库加密和解密
SQLITE3 加密

SQLITE3 加密12008年05月28日星期三08:07给数据库加密前面所说的内容网上已经有很多资料,虽然比较零散,但是花点时间也还是可以找到的。
现在要说的这个——数据库加密,资料就很难找。
也可能是我操作水平不够,找不到对应资料。
但不管这样,我还是通过网上能找到的很有限的资料,探索出了给sqlite数据库加密的完整步骤。
这里要提一下,虽然sqlite 很好用,速度快、体积小巧。
但是它保存的文件却是明文的。
若不信可以用NotePad 打开数据库文件瞧瞧,里面insert 的内容几乎一览无余。
这样赤裸裸的展现自己,可不是我们的初衷。
当然,如果你在嵌入式系统、智能手机上使用sqlite,最好是不加密,因为这些系统运算能力有限,你做为一个新功能提供者,不能把用户有限的运算能力全部花掉。
Sqlite为了速度而诞生。
因此Sqlite本身不对数据库加密,要知道,如果你选择标准AES算法加密,那么一定有接近50%的时间消耗在加解密算法上,甚至更多(性能主要取决于你算法编写水平以及你是否能使用cpu提供的底层运算能力,比如MMX或sse系列指令可以大幅度提升运算速度)。
Sqlite免费版本是不提供加密功能的,当然你也可以选择他们的收费版本,那你得支付2000块钱,而且是USD。
我这里也不是说支付钱不好,如果只为了数据库加密就去支付2000 块,我觉得划不来。
因为下面我将要告诉你如何为免费的Sqlite扩展出加密模块——自己动手扩展,这是Sqlite允许,也是它提倡的。
那么,就让我们一起开始为sqlite3.c 文件扩展出加密模块。
i.1 必要的宏通过阅读Sqlite 代码(当然没有全部阅读完,6万多行代码,没有一行是我习惯的风格,我可没那么多眼神去看),我搞清楚了两件事:Sqlite是支持加密扩展的;需要#define 一个宏才能使用加密扩展。
这个宏就是SQLITE_HAS_CODEC。
你在代码最前面(也可以在sqlite3.h 文件第一行)定义:复制内容到剪贴板代码:#ifndef SQLITE_HAS_CODEC#endif如果你在代码里定义了此宏,但是还能够正常编译,那么应该是操作没有成功。
数据库中数据加密与解密的实现方法

数据库中数据加密与解密的实现方法在当今信息时代,数据的安全性愈发突显重要。
尤其是数据库中存储的大量敏感数据,如用户个人信息、企业机密等,必须得到有效的保护,以防止恶意访问和滥用。
加密与解密是一种常用的数据保护措施,通过对数据进行加密处理,即使数据库遭到非法访问,也能有效防止数据泄露。
本文将介绍数据库中数据加密与解密的实现方法。
一、对称加密算法对称加密算法是一种常用的加密方法,也称为私钥加密算法。
该算法使用相同的密钥进行加密和解密操作,因此在应用中密钥的保护措施至关重要。
对称加密算法的优点是加密解密速度快,适合对大量数据进行加密。
常见的对称加密算法有DES(Data Encryption Standard)、AES(Advanced Encryption Standard)等。
在数据库中使用对称加密算法进行数据加密,需要进行以下步骤:1. 选择合适的加密算法和密钥长度。
根据实际需求和数据敏感程度,选择适当的对称加密算法和密钥长度。
2. 生成密钥并妥善保存。
为了保证数据的安全性,密钥的生成和妥善保存非常重要。
可以使用专门的密钥管理系统来生成和管理密钥。
3. 对数据进行加密处理。
对于需要加密的数据,在数据库中创建相应的字段,并通过对称加密算法使用密钥对数据进行加密处理。
4. 存储密文。
将加密后的数据存储在数据库中。
为了提高安全性,最好将密钥和密文分别存储在不同的位置,以免数据泄露导致密钥被获取。
5. 解密数据。
在需要访问加密数据的时候,通过密钥使用相同的对称加密算法进行解密处理,得到明文数据。
二、非对称加密算法非对称加密算法也称为公钥加密算法,相对于对称加密算法,它使用一对不同的密钥进行加密和解密操作,一把密钥是公开的,称为公钥,而另一把密钥是私密的,称为私钥。
公钥用于加密数据,只有持有相应私钥的人才能解密数据。
非对称加密算法的优点是密钥的传输相对安全,不会被中间人窃取。
常见的非对称加密算法有RSA、DSA、ECC等。
数据库数据加密与解密的方法和工具

数据库数据加密与解密的方法和工具数据加密和解密是数据库中保护数据安全的重要手段之一。
随着数据泄露事件的增加,使用适当的加密技术可以防止数据被未经授权的用户访问、修改或泄露。
本文将介绍数据库数据加密的方法和常用的加密工具,帮助读者更好地保护数据库中的敏感信息。
一、数据库数据加密的方法1.列级加密:对数据库中的特定列进行加密。
可以优先保护敏感数据,例如用户的姓名、地址或银行卡号。
这种方法较为常见,且对于查询和分析数据的性能影响较小。
2.行级加密:对数据库中的每一行数据进行加密。
这种方法可保护整行数据的安全,但由于需要对每一行进行加密和解密处理,因此对数据库性能会有较大影响。
3.表级加密:对整个数据库表进行加密。
这种方法是对表中的所有数据进行加密,可以提供更高的安全性。
但在查询和分析数据时会有较大的性能影响。
4.透明加密:在数据库引擎层面实现加密,对应用程序透明,无需修改现有应用程序。
这种方法可以最大程度地保护数据安全且不影响现有业务,但实现相对复杂。
5.应用级加密:在应用程序中实现加密,而非依赖数据库。
这种方法相对简单,但需要对所有应用程序进行修改,并无法保护数据库备份中的数据。
二、常用的数据库加密工具1.Oracle Advanced Security:Oracle数据库提供了一套完整的加密解决方案,包括网络数据加密、存储数据加密和数据库链接加密。
其强大的加密功能和灵活的配置选项使得数据加密和解密易于操作和管理。
2.MySQL Enterprise Encryption:MySQL企业版提供了一系列的安全增强功能,包括数据加密。
其支持列级加密和透明加密,可以使用对称密钥或非对称密钥进行加密。
3.SQL Server Transparent Data Encryption(TDE):SQL Server提供了透明数据加密功能,可以保护数据和备份存储在磁盘上的文件。
TDE使用数据库管理员提供的加密密钥来加密整个数据库。
sql存储过程的加密和解密方法(含sql2016和sql2016版本

sql存储过程的加密和解密(有sql2000和sql2005)★加密存储过程:IF EXISTS (SELECT name FROM sysobjects WHERE name = 'encrypt_this' AND type = 'P') DROP PROCEDURE encrypt_thisGOUSE pubsGOCREATE PROCEDURE encrypt_thisWITH ENCRYPTION ---只需要在创建时加入WITH ENCRYPTION即可ASSELECT * FROM authorsGO--查看存储过程文本:EXEC sp_helptext encrypt_this下面是结果集:The object's comments have been encrypted. ----对象已经被加密★解密存储过程:CREATE PROCEDURE sp_decrypt(@objectName varchar(50))ASbeginset nocount on--CSDN:j9988 copyright:2004.04.15--V3.1--破解字节不受限制,适用于SQLSERVER2000存储过程,函数,视图,触发器--修正上一版视图触发器不能正确解密错误--发现有错,请E_MAIL:*****************begin trandeclare @objectname1 varchar(100),@orgvarbin varbinary(8000)declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000)DECLARE @OrigSpText1 nvarchar(4000), @OrigSpText2 nvarchar(4000) ,@OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)declare @i int,@status int,@type varchar(10),@parentid intdeclare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int select @type=xtype,@parentid=parent_obj from sysobjects whereid=object_id(@ObjectName)create table #temp(number int,colid int,ctext varbinary(8000),encryptedint,status int)insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments WHERE id = object_id(@objectName)select @number=max(number) from #tempset @k=0while @k<=@numberbeginif exists(select 1 from syscomments where id=object_id(@objectname) andnumber=@k)beginif @type='P'set @sql1=(case when @number>1 then 'ALTER PROCEDURE '+ @objectName+';'+rtrim(@k)+' WITH ENCRYPTION AS 'else 'ALTER PROCEDURE '+ @objectName+' WITH ENCRYPTION AS 'end)if @type='TR'begindeclare @parent_obj varchar(255),@tr_parent_xtype varchar(10)select @parent_obj=parent_obj from sysobjects where id=object_id(@objectName) select @tr_parent_xtype=xtype from sysobjects where id=@parent_objif @tr_parent_xtype='V'beginset @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1 'endelsebeginset @sql1='ALTER TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 'endendif @type='FN' or @type='TF' or @type='IF'set @sql1=(case @type when 'TF' then'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end 'when 'FN' then'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end'when 'IF' then'ALTER FUNCTION '+ @objectName+'(@a char(1)) returns table with encryption as return select @a as a'end)if @type='V'set @sql1='ALTER VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 as f'set @q=len(@sql1)set @sql1=@sql1+REPLICATE('-',4000-@q)select @sql2=REPLICATE('-',8000)set @sql3='exec(@sql1'select @colid=max(colid) from #temp where number=@kset @n=1while @n<=CEILING(1.0*(@colid-1)/2) and len(@sQL3)<=3996beginset @sql3=@sql3+'+@'set @n=@n+1endset @sql3=@sql3+')'exec sp_executesql @sql3,N'@Sql1 nvarchar(4000),@varchar(8000)',@sql1=@sql1,@=@sql2endset @k=@k+1endset @k=0while @k<=@numberbeginif exists(select 1 from syscomments where id=object_id(@objectname) andnumber=@k)beginselect @colid=max(colid) from #temp where number=@kset @n=1while @n<=@colidbeginselect @OrigSpText1=ctext,@encrypted=encrypted,@status=status FROM #temp WHERE colid=@n and number=@kSET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k)if @n=1beginif @type='P'SET @OrigSpText2=(case when @number>1 then 'CREATE PROCEDURE '+ @objectName+';'+rtrim(@k)+' WITH ENCRYPTION AS 'else 'CREATE PROCEDURE '+ @objectName +' WITH ENCRYPTION AS 'end)if @type='FN' or @type='TF' or @type='IF'SET @OrigSpText2=(case @type when 'TF' then'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end 'when 'FN' then'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns char(1) with encryption as begin return @a end'when 'IF' then'CREATE FUNCTION '+ @objectName+'(@a char(1)) returns table with encryption as return select @a as a'end)if @type='TR'beginif @tr_parent_xtype='V'beginset @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1 'endelsebeginset @OrigSpText2='CREATE TRIGGER '+@objectname+' ON '+OBJECT_NAME(@parentid)+' WITH ENCRYPTION FOR INSERT AS PRINT 1 'endendif @type='V'set @OrigSpText2='CREATE VIEW '+@objectname+' WITH ENCRYPTION AS SELECT 1 as f'set @q=4000-len(@OrigSpText2)set @OrigSpText2=@OrigSpText2+REPLICATE('-',@q)endelsebeginSET @OrigSpText2=REPLICATE('-', 4000)endSET @i=1SET @resultsp = replicate(N'A', (datalength(@OrigSpText1) / 2))WHILE @i<=datalength(@OrigSpText1)/2BEGINSET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1,@i, 1)) ^(UNICODE(substring(@OrigSpText2, @i, 1)) ^UNICODE(substring(@OrigSpText3, @i, 1)))))SET @i=@i+1ENDset @orgvarbin=cast(@OrigSpText1 as varbinary(8000))set @resultsp=(case when @encrypted=1then @resultspelse convert(nvarchar(4000),case when @status&2=2 then uncompress(@orgvarbin) else @orgvarbin end)end)print @resultspset @n=@n+1endendset @k=@k+1enddrop table #temprollback tranend----创建存储过程sp_decrypt后,执行以下操作.----调用时,exec sp_decrypt ‘要解密的存储过程名’---此时使用 exec sp_helptext ‘存储过程名’,即可查看存储过程的文本信息★再有一个Sql 2005 版的(上面的是SqlServer2000的)SQLServer2005里使用with encryption选项创建的存储过程仍然和sqlserver2000里一样,都是使用XOR进行了的加密。
sqlcipher windows编译

sqlcipher windows编译SQLCipher是一种用于加密SQLite数据库的开源扩展。
它提供了在Windows平台上编译和使用的功能。
在本文中,我们将探讨如何在Windows上编译SQLCipher以及使用它来加密和解密SQLite数据库。
我们需要下载和安装一些必要的工具和库文件。
我们可以从官方网站下载最新版本的SQLCipher源代码,并使用CMake工具生成适用于Windows的构建脚本。
此外,我们还需要安装一个C语言编译器,如MinGW或者Visual Studio。
一旦准备就绪,我们可以开始编译SQLCipher了。
首先,我们需要打开一个命令行终端,并进入SQLCipher源代码的根目录。
然后,我们可以运行CMake来生成Visual Studio或MinGW的构建脚本。
例如,我们可以运行以下命令来生成Visual Studio的构建脚本:```cmake -G "Visual Studio 16 2019" -DCMAKE_BUILD_TYPE=Release .```接下来,我们可以使用生成的构建脚本来编译SQLCipher。
对于Visual Studio,我们可以打开生成的.sln文件,并选择适当的配置和目标来构建SQLCipher。
对于MinGW,我们可以运行以下命令来进行编译:```mingw32-make```一旦编译完成,我们将得到一个名为sqlcipher.exe的可执行文件。
我们可以使用该文件来加密和解密SQLite数据库。
要加密数据库,我们可以运行以下命令:```sqlcipher.exe path/to/database.db```这将提示我们输入一个加密密码,并将数据库加密。
要解密数据库,我们可以运行以下命令:```sqlcipher.exe path/to/database.db```这将提示我们输入之前设置的密码,并将数据库解密。
数据库中数据加密与解密的流程与实现要点解析及实际应用案例分析分享

数据库中数据加密与解密的流程与实现要点解析及实际应用案例分析分享数据加密与解密是保护数据安全的重要手段,数据库中的数据加密和解密流程及实现要点的解析对于保护敏感信息至关重要。
本文将分析数据库中数据加密与解密的流程和实现要点,并通过一个实际应用案例进行分享。
一、数据库中数据加密与解密的流程在数据库中,数据加密和解密的流程大致可以分为以下几个步骤:1. 确定加密需求:首先要明确要加密的数据对象,是整个数据库还是特定的表、列或字段。
同时也要确定采用哪种加密算法和密钥管理方式。
2. 数据分类和分类加密:根据数据的敏感程度,将数据进行分类。
对于高度敏感的数据,使用较高级别的加密算法和密钥进行加密;对于一般敏感的数据,可以使用适当的加密算法进行加密。
3. 生成密钥和管理密钥:选择合适的密钥生成方式,可以使用对称密钥或非对称密钥。
对称密钥加密的方式简单、高效,但是密钥分发和管理较为复杂;非对称密钥加密的方式较为安全,但是加解密过程相对较慢。
4. 数据加密和解密操作:使用合适的加密算法和密钥对数据进行加密和解密操作。
加密操作将明文数据转化为密文数据,解密操作将密文数据转化为明文数据。
5. 密钥的保护和管理:密钥的保护十分重要,可以采用硬件安全模块(HSM)等方式对密钥进行保护。
同时还需要建立密钥的有效期、权限控制和密钥归档等管理机制。
二、数据库中数据加密与解密的实现要点1. 数据分类和属性选择:根据数据的敏感程度,将数据进行分类。
同时需要选择合适的加密算法和密钥管理方式。
一般敏感的数据可以选择对称加密算法,如AES等;对于高度敏感的数据可以选择非对称加密算法,如RSA等。
2. 密钥生成与管理:根据加密算法的不同,选择合适的密钥生成和管理方式。
对称加密算法中,密钥的生成可以使用随机数生成器;密钥的管理可以使用密钥分发中心(KDC)或密钥管理系统(KMS)。
非对称加密算法中,需要生成公钥和私钥,其中公钥可以发布到公开的地方,私钥需要严格保护。
SQLite的加密扩展方法

SQLite的加密扩展方法这篇文章专门介绍如何扩展当前正越来越流行SQLite的数据库的加密部分, SQLite是"一个无须任何配置部署的嵌入式SQL数据库."背景我为什么要写这个扩展? 为了满足我自己的一些疯狂的想法. :) 好了,不开玩笑了. 不久前我想写一个程序用来存储一些私人信息 (我自己的一个项目). 我不想用那些很大的开源数据库,例如MySQL,因为它们确实是太大了,需要占用很大的空间,而且要单独的安装部署. 后来我发现了 SQLite, 它非常的小巧而且运行起来很快,并且它的API函数十分的简单,在我的C++程序当中可以很方便的使用. 就是有一个问题,大概是由于它要保持简单所以它不支持任何的验证和加密. 这令我一点安全感都没有.因此我开始寻找SQLite的加密解决方案. 我找到了两个,但是它们都是商业软件. SQLite的作者, D. Richard Hipp先生提供了一个可以对数据库文件进行完全加密SQLite的加强版本. 也就是那个叫做SQLcrypt(tm)的商业软件, 它实现了数据存储层的透明加密. 不幸的是它们对于我们这些普通人来说都太贵了, 尤其是对于我这种非商业目的只是想用SQLite开发一些小应用自己玩的人来说更是如此. 然而我却是非常的需要对数据库进行加密- 在数据库层对整个数据库文件进行透明的加密. 所有的开发者和用户只需要在打开数据库的时候提供密码就可以了. 然后接下来的事情就全都交给数据库去做了. 这种方式将比那种在数据和字段上的加密要容易的多,也方便的多, 不然需要加密的字段就都要设计成BLOB或者string类型了.在我搜索了SQLite的邮件列表和在Google上搜索免费的SQLite插件或扩展之后,我发现没有能够满足我的需求的, 所以我决定自己写一个. 我从SQLite的作者预留的一些用来支持数据库加密解密的API接口获得了灵感,并且我发现实际上也有人写了一个基于SQLite的加密库 (SQLcrypt). 我花费了几天的时间来研究一些加密的算法,我要选出一种使用(The AES (Rijndael) block cipher) ,另外还有就是如何生成密码, 当然最重要的就是我怎样才能把我用来完成加密解密数据库的代码嵌入SQLite的核心当中执行.扩展模块的技术说明书这个扩展模块的结构相当的简单. 大体上来说我编写了SQLite代码中已经提供了原型的四个函数: sqlite3_key(), sqlite3_rekey(),sqlite3CodecGetKey(), 和 sqlite3CodecAttach(). 前两个函数是在sqlite3.h头文件中定义的公共API. 另外两个定义在 attach.c 的sqlite3Attach()函数中. 我阅读了它的源代码中提供的函数原形(主要是pager.c 和 btree.c两个文件),看一下它们是如何工作的. 我发现实现他们并不困难,因为对数据库加密解密的机制已经都实现了(感谢 Richard!).这个扩展的其他部分就是写一个用来加密和解密的程序. 为此我使用了AES加密算法,其中代码的关键部分取自Brian Gladman (his site) 还有David Ireland的高精度加密算法库BigDigits. 因为我不想在一开始的时候就跟SQLite的数据库格式过多的纠缠, 所以我用了计数器模式(CTR)把AES加密块转换成256字节的加密流. 这样加密之后的密文就可以和原来的明文有相同的长度,加密和没加密的数据库文件尺寸相同 (也就是说不需要保存而外的信息). 我还使用了Brian Gladman网站上提供的 PKCS#5签名的SHA256算法从用户提供的密码中来生成AES 算法的密钥. 如果是这样的话, 我就要写很多的代码来处理salt value 才能避免往数据库中存入额外的信息.Pager结构体用来存放指向编码函数的指针, 用来从数据库中加密或解密数据. 我写了这些代码用来加密或解密数据库中的记录. 因为我使用了计数器(CTR)模式,加密和解密用的是相同的算法,所以简单了许多. 但是我还是需要初始化一个进程的计数器. 我把数据库切分成了一个一个的块,每个都作为一个单独的AES加密块 (例如默认的情况下是16字节). 每个块都从0开始编号. 依据传入编码函数的page size和page number参数, 我算出计数块内的计数值(等于块的编号) 和偏移量 (具体实现请看代码),然后用它来初始化加密流.安装和使用警告: 目前的代码还在试验当中. 因此我很希望大家来帮我测试这些代码(因为我没有那么多的时间和数据去进行测试), 使用的风险需要你自己去承担.如果要使用这个扩展模块你需要下载修改过的SQLite和BigDigits库,然后自己编译它们. 我只是在Win32系统下用MinGW compiler编译并测试过. 但是我认为它在*nix系统下也能正常工作. 如果你要使用MinGW, 你需要下载最新版MinGW的和M-sys . 我是用gcc 3.4.2编译的.BigDigits高精度算法库可以从这里下载, 我自己写了一个Makefile 文件用MinGW把它编译成了一个静态的库文件. 下载包里有编译好的BigDigits库文件. (bigdigits.h 和libbdmpa.a) 如果你想要自己编译,请遵循以下步骤:1. 从上面的地址下载源代码.2. 解压到一个目录里.3. 下载并保存'Makelib.mak'文件到刚才的目录.4. 修改头文件中最开始的一些 #define's和typedef's使之适合你的操作系统.5. 在命令行中输入'make -f Makelib.mak'编译源代码.6. 把编译出来的libbdmpa.a文件和bigdigits.h头文件拷贝到SQLite的顶层目录下.对于Linux/Unix和MinGW的用户, 你只需要按照通常的步骤去做就可以./configuremakemake install把SQLiteSecure编译了(包括配置和安装). 编译出来的库文件和命令行可执行文件和原始的SQLite基本相同,除了前面加上了'sec'前缀,从而避免和你之前使用的SQLite命名冲突.注意: **请** 不要问我如何用VC++或者其他编译其编译源代码. 以为我不用,所以不知道.你可以用的命令行sqlite3sec工具来先体验一下SQLiteSecure. 打开一个普通的数据库文件, 输入$ sqlite3sec a.db打开一个加密的数据库文件, 输入$ sqlite3sec -key "your passphrase" b.db在sqlite3sec中你可以使用下列三种方法来添加一个加密的数据库:sqlite> ATTACH 'b.db' AS b;sqlite> ATTACH 'b.db' AS b KEY 'your passphrase';sqlite> ATTACH 'b.db' AS b KEY blob;第一种方法使用和主数据库相同的密码(或者是没有密码) , 第二种方法用你输入的短语来做密码. 第三种方法假设你用BLOB的十六进制值作为密码(例如 f03d69ac3981...). 不过我还没有充分的测试这个使用BLOB作为密码的版本. 请注意:如果你的主数据库是加密的,然后你想添加一个不加密的数据库,这种情况下你需要用第二种方法然后传递一个空字符串('')作为密码.在sqlite3sec中你还可以用.rekey命令来改变数据库的密码,但是这个我目前还没有写完,如果调用的话会返回一个错误. ;)API方法, 如果你需要加密一个数据库,你仅仅需要从用户或者其他的地方得到设置的密码, 然后在sqlite3_open() 或者 sqlite3_open16()函数之后,在调用其他的sqlite3函数之前调用sqlite3_key()函数。
SQLite数据库加密的分析与设计

SQLite数据库加密的分析与设计褚龙现【摘要】针对Android系统下SQLite未提供安全机制的问题,通过分析大型关系数据库管理系统的安全措施,采取修改SQLite源代码的方法,实现了数据库管理系统级的数据库加密功能.该加密功能不仅能对数据本身进行加密,并能通过JNI接口形式提供给上层应用程序调用,从而使应用程序可以访问安全性更高的数据库,提高了Android应用的安全性.实验结果表明了加密功能的可行性和有效性.【期刊名称】《电子设计工程》【年(卷),期】2014(022)016【总页数】3页(P191-193)【关键词】Android;数据库;加密;安全机制【作者】褚龙现【作者单位】平顶山学院河南平顶山467000【正文语种】中文【中图分类】TN919SQLite作为一个开源的嵌入式数据库管理系统[1],被应用在Android操作系统中,用以保存用户重要信息[2]。
Android系统的开源性使得其发展速度非常快,这一方面带来了用户更好地体验,另一方面不可避免地出现了威胁系统安全的风险[3]。
就数据安全而言,风险主要体现在非法用户恶意破坏Android手机中数据,究其原因主要是因为不能很好地限制用户对数据文件的直接访问。
尽管SQLite满足存储效率高、查询速度快和运行时占用内存小等特点,但是它并没有提供安全控制机制[4]。
在Android系统中,具备数据库文件读写权限的用户可以方便地使用文本编辑器获得数据信息,数据库中存储的重要数据未能受到保护。
本文在分析SQLite数据库安全机制的基础上,设计了数据加密功能。
1 关系数据库安全分析目前的应用程序绝大部分是以数据为中心的,数据库中保存着应用程序处理的各类数据,其在应用程序中的地位显得非常重要。
数据库的安全直接关系到应用程序的安全,成为信息安全的核心组成部分[5]。
在众多数据库产品中,关系数据库的使用最为广泛,为了保护关系数据库不被非法用户使用,同时拒绝合法用户的非法操作,主要从存取管理、安全管理和数据加密等方面进行控制[6]。