用sqlcipher对已有的SQLite数据库加密

用sqlcipher对已有的SQLite数据库加密,第1张

概述    本人最近在学习Android程序,用到了SQLite数据库,但是到最后却很纠结地发现android中的SQLite没法添加密码,很坑爹。网上寻找了很多资料,最多说的是用sqlcipher加密,这个方案确实不错,但是接着的问题才是最重要的:网上给出的sqlcipher方案例子都是新建带密码的数据库,然后添加数据,我几十兆的数据总不能逐条写吧?(其实也可以,但是比较懒。)又查了很多资料,发现用

本人最近在学习AndroID程序,用到了sqlite数据库,但是到最后却很纠结地发现androID中的sqlite没法添加密码,很坑爹。网上寻找了很多资料,最多说的是用sqlcipher加密,这个方案确实不错,但是接着的问题才是最重要的:网上给出的sqlcipher方案例子都是新建带密码的数据库,然后添加数据,我几十兆的数据总不能逐条写吧?(其实也可以,但是比较懒。)又查了很多资料,发现用到的最多的是sqlcipher的命令模式直接改密码,但是本人初学androID,没有看懂(真心希望懂的人教一教),真是搞不明白为什么sqlcipher不做一个改密码的函数!(或者我不知道?)

以上各种感受,现在说说我的方法吧:

直接改密码是不行了,找了一个折中的办法:

1.新建一个代密码的数据库;

2.连接(attach)原数据库;

3.直接拷贝表。

sqlcipher的具体用法不描述了,和androIDsqlite的函数都是一样的,仅仅是在新建、打开等 *** 作时多了一个密码的参数,不懂的话可以百度搜,以下我只列出了需要用到的关键语句(本文中的所有sqliteDatabase类都是net.sqlcipher.database.sqliteDatabase不是androID中的sqliteDatabase)。。

首先新建一个带密码的数据库:

sqliteDatabase dataTarget =sqliteDatabase.openorCreateDatabase([这里填新建加密数据库文件路径],[这里是数据库密码],null);

新数据库连接老数据库:

//链接数据库      dataTarget.execsql("attach '"+[这里填原数据库文件路径]+"' as sourcelib key '';");// sourcelib是老数据库的别名,第二个参数是密码,由于原数据库没有加密所以密码为:’’。

新建拷贝表:

dataTarget.execsql("select * into[表名] from sourcelib.[表名]");
有几个表执行几次。

需要说明的是,这种方式新建的表没有原表的主键默认值等信息,如果要保留主键默认值等信息用如下方法:

1.新建加密数据库;(同上,略)

2.新建表,同原表结构;

这一步可以用sqlite Expert等软件直接提取到sql脚本复制到编程语句即可。如下图:

3.链接原数据库;(同上,略)

4.insert语句拷贝表:

dataTarget.execsql("insert into[表名] select * from sourcelib.[表名]");

以上即可完成。

 总结

以上是内存溢出为你收集整理的用sqlcipher对已有的SQLite数据库加密全部内容,希望文章能够帮你解决用sqlcipher对已有的SQLite数据库加密所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1171959.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存