首页 > 数据库 >Android sqlcipher 对于加密的Sqlite库在Mac上进行解密的正确姿势

Android sqlcipher 对于加密的Sqlite库在Mac上进行解密的正确姿势

时间:2022-08-29 16:35:15浏览次数:108  
标签:Sqlite 加密 db sqlite 解密 Mac sqlcipher import

前言:

说实话我平常对于工作中的一些所经历的问题很少记录成文,基本上都是一些学习笔记,这里打算备忘一篇,由于领导的要求,最近也刚好在大重构,需要对Android App中应用使用的db进行一个加密,由于之前木有搞过这块,度娘了一下需要采用三方的这个库:https://github.com/sqlcipher/sqlcipher,然后如果你项目中是用的Android自带的Sqlite,而非三方的像realm,greendao,其集成成本几乎为0,所以这里做一个备忘,简单记录一下~~

加密步骤:

对于加密这块其实网上一大堆说明,为了文章的完整性,我这实现的时候也是参考这位大佬的https://www.jianshu.com/p/e296a5b59559,简单列一下。

1、添加依赖:

    /* 数据库加密 */
    api "net.zetetic:android-database-sqlcipher:4.5.0"

2、整体将原生的sqlite包替换成sqlcipher的:

sqlcipher这位大神真的封装得太好了,完全按着Android原生的sqlite使用规则来封装的,所以接下来则将项目中你原生导的sqlite的包整体替换成sqlcipher的包既可,主要是对于原生sqlite的如下包:

import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

整体替换成:

import net.sqlcipher.Cursor;
import net.sqlcipher.database.SQLiteDatabase;
import net.sqlcipher.database.SQLiteOpenHelper;

当然,这里列的不全,可能还会有其它的一些包,到时改完运行根据报错再相应的重新导下包既可。

3、修改获取写库时方式:

既然对数据库加密了,很明显是需要涉及到密钥对吧,对于sqlcipher而言,在获取写库时则需要传一个密钥,所以这块需要改一下,如下:

String key = "你的密钥";
sqlliteHelper.getWritableDatabase(key);

4、Application初始化一下sqlcipher:

由于这个库会使用一些so的东东,所以很明显需要将它加载进行进行jni的处理,所以需要在Application中调用一下它:

SQLiteDatabase.loadLibs(this);

5、加密之后用Navicat就无法打开了:

如果正常加密了,则将db导出来想用Navicat打开查看数据就变得不可能了,除非你知道密钥,打开会报:

而要想打开,此时就需要涉及到对数据库解密了,下面既将对它进行说明。

解密步骤【重点】:

说实话,这上解密我在网上搜了大半天才搞定,感觉如果时间久了到时绝对忘,所以这也是为啥产生此篇的原因,分享的同时,也是对自己备忘最好的一种方式,下面直奔主题。

思路:

很简单,就是将加密的db给解密成不加密的库呗,而sqlcipher官方本身就提供有解密库的支持。

办法:【针对mac平台】

由于我本身是在mac上开发,所以解密这个我只从mac的角度出发了,应该windows的步骤是差不多的,这里就不过多说明了。

1、先安装sqlcipher命令:

网上有其它的办法,比如下载官方的源码手动make,其对于mac来说最简单的就是用它:

brew install sqlcipher

如果安装不成功的自行解决,反正需要有这个命令才行,如果安装成功的话执行它会显示:

其实使用它就可以查看加密库中的数据了,只要设置对了密钥,比如:

但是!!!很明显对于一个商业应用的数据库这样来查看数据很不友好,一般都是想着把db导出来,然后使用专业的三方数据库工具来查看数据对吧,所以这也是接下来要解决的。

2、对加密的数据库进行解密:

接下来则可以使用这个命令对你导出经过sqlcipher加密过的db进行解密处理了,具体执行如下:

sqlcipher ./encrypt.db
SQLite version 3.34.1 2021-01-20 14:10:07 (SQLCipher 4.4.3 community)
Enter ".help" for usage hints.
sqlite> PRAGMA KEY='p123456@lonch';//这里设置加密的key
ok
sqlite> ATTACH DATABASE 'decrypt.db' AS decrypt KEY '';//注意key后面的为空代表解密出来的db不加密,如果你设置不为空,那等于没解密哟
sqlite> SELECT sqlcipher_export ('decrypt');//将数据导到不加密的库中
sqlite> DETACH DATABASE decrypt;
sqlite> .q

这块没啥好说的,试一下就知道了,反正我的是解密成功了:

3、愉快的使用Navicat来查看库数据:

这就不用多说了,也是解密的最终目的。

标签:Sqlite,加密,db,sqlite,解密,Mac,sqlcipher,import
From: https://www.cnblogs.com/webor2006/p/16636193.html

相关文章

  • MediaHuman YouTube Downloader for Mac(视频下载软件)
    MediaHumanYouTubeDownloaderforMac是一款适用于mac视频下载软件。mediahumanyoutubemac支持多个视频同时下载,支持超高分辨率包括4K和8K,支持YouTube,Vimeo,DAIlymotion......
  • mac远程连接windows
    MicrosoftRemoteDesktopBeta10.7.5下载:https://www.macwk.com/soft/microsoft-remote-desktop-beta 远程传送文件的方法 远程:......
  • Mac系统下Datagrip打不开、点击没反应?
    有没有可能是因为你从网上下载了一些破解软件导致的?背景Mac系统下JB公司家的IDEA、Datagrip、PyCharm或Goland打不开点击没反应……分析大概率是之前安装过汉化插......
  • Ps 2022在M1 mac上导出 PNG 格式发生未知错误如何解决?
    Photoshop2022formac在M1上导出PNG时,会提示“发生了未知错误”,即使点击“导出”按钮,导出的图片也是一个空白文件。小编教给大家Ps2021在M1mac上导出PNG格式发......
  • state machine
    2370. LongestIdealSubsequenceMediumYouaregivenastring s consistingoflowercaselettersandaninteger k.Wecallastring t ideal ifthef......
  • Paragon NTFS 15 for Mac(Mac电脑读写NTFS格式数据)
    想让Mac电脑读取Windows上NTFS格式的磁盘?用ParagonNTFS15forMac,这是一款MacOS系统上广受青睐的ntfs读写工具。NTFS15轻松实现Mac电脑读写NTFS磁盘文件。通过Microsoft......
  • Apple Mac clear System Data All In One
    AppleMacclearSystemDataAllInOneAppleMac清除系统数据https://www.imymac.com/zh-CN/powermymac/how-to-clear-system-storage-on-mac.html/Users/xgqfrms......
  • 环世界RimWorld for Mac(模拟建造游戏)中文
    Mac建造模拟游戏哪款好玩?环世界RimWorldforMac是Mac平台上一款非常好玩的模拟生存游戏。在macrimworld环世界游戏中,游戏中玩家可以创造一个属于自己的世界,以上帝视角指......
  • mac的endnote与Word不兼容解决办法
    因为新的Macbookair和Macbookpro使用的是苹果自身的M1芯片,endnotex9和20版本的软件并不兼容这样的芯片,虽然可以用rosetta打开,但是它的word插件确不能被word打开,表现为w......
  • Rayman Mini for Mac(雷曼迷你跑酷游戏)中文
    RaymanMiniforMac是一款运行在MacOS平台上的经典跑酷类游戏,玩家在RaymanMini可以看到经典的传统角色,与玩家一起在世界中探险,还有超多全新的角色出现。游戏包含动作横向......