Android 动态获取数据库需要的准备工作

逆向解析:Android微信EnMicroMsg.db数据库的密钥生成与访问机制 本文深入解析了Android微信EnMicroMsg.db数据库的密钥生成与访问机制。通过逆向工程,详细介绍了密钥生成的MD5算法实现、UIN提取方法以及数据库解密步骤,帮助开发者理解微信本地数据加密原理,并提供实用的解密操作指南。 阅读详情

1.需要用到SQLCipher ,它是目前比较流行的一款开源的SQLite加密工具 SQLCipher,对数据文件进行加密,当然微信也在使用。 SQLCipher是完全开源的,其代码托管在github上。SQLCipher使用256-bit AES加密,由于其基于免费版的SQLite,主要的加密接口和SQLite是相同的,也增加了一些自己的接口。它有一个缺点就是使用该库之后会导致Apk会变大6M左右。下面主要说明在代码中如何使用SQLCipher的提供的接口。
1.下载库文件:点击下载
2.解压文件可以得到所需要的库文件,都在在lib和assets文件夹下 :SQLCipher file
3.导入到Android工程中 :
a.首先将assets目录下的icudt46l压缩包拷贝到对应Android工程下的assets目录下 :
SQLCipher file
b. 导入sqlcipher.jar包
SQLCipher file
c.将lib下面文件夹中的so库导入到对应Android工程中:
SQLCipher file

4.使用SQLCipher数据库
SQLCipher数据库用法相比于Android原生数据库用法,除了引入的包不一样了,其它的用法和传统的SQLiteOpenHelper都是完全相同的。只是导包的时候替换成SQLCipher的数据库文件,如下:

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

所有有关数据库的代码,只要修改引入的包成SQLCipher的包,就可以完美替换(原先的代码不需变动),在用法上只两个注意点就可以了,其余的一模一样。下面介绍两个不同点,其余的数据库操作用法一样。
a.初始化时需要初始化库:必须先调用:

SQLiteDatabase.loadLibs(context);

然后再执行数据库相关的操作,建议在Application中初始化,或者在初始化单例SQLiteOpenHelper的时候初始化。
b.获取数据库db对象时需要传入key:

db = sqLiteOpenHelper.getWritableDatabase(password);

这里在调用getWritableDatabase()方法的时候传入了一个字符串参数,它就是SQLCipher所依赖的key,在对数据库进行加解密的时候SQLCipher都将使用这里指定的key。
c.还有就是利用指定密码连接加密的数据库文件:


/**
 * 连接数据库
 *
 * @param dbFile
 */
private void openWxDb(File dbFile) {
    Context context = MyApplication.getContextObject();
    SQLiteDatabase.loadLibs(context);
    SQLiteDatabaseHook hook = new SQLiteDatabaseHook() {
        public void preKey(SQLiteDatabase database) {
        }
 
        public void postKey(SQLiteDatabase database) {
            database.rawExecSQL("PRAGMA cipher_migrate;"); //兼容2.0的数据库
        }
    };
 
    try {
        //打开数据库连接
        SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbFile, mDbPassword, null, hook);
        //查询等数据库操作
        Cursor c1 = db.rawQuery("select * from table1", null);
        while (c1.moveToNext()) {
            String userName = c1.getString(c1.getColumnIndex("username"));
            String nickName = c1.getString(c1.getColumnIndex("password"));
        }
        c1.close();
        db.close();
    } catch (Exception e) {
        LogUtil.log("读取数据库信息失败" + e.toString());
//            e.printStackTrace();
    }
}

Android Studio插件Database Navigation实战:3分钟搞定SQLite数据库连接与查询 本文详细介绍了如何在Android Studio中通过Database Navigation插件快速连接和操作SQLite数据库。文章提供了从插件安装、数据库文件定位到建立连接、执行SQL查询的完整实战指南,旨在帮助Android开发者在3分钟内提升数据库调试与开发效率,避免繁琐的上下文切换。 阅读详情

相关推荐

安卓连接sql服务器 第一讲准备篇

众所周知,安卓自带sqlite数据库,但在实际中我们往往要需要连接网络上的数据库。这里我就讲一下如何sql server。安卓连接sql server的方法有两种,一种是直接连接,这种方法代码简单,查询速度快,但我们知道安卓容易被反编译,这样数据库就暴露了,即使做了安全加固,服务器也往往为了安全禁止或限制外部连接,所以一般不建议使用直接连接,另一种是通过api连接,我这里使用asp.net作为api。   在实现代码前我们要以做好各项准备工作,首先是开发工具,它们是Sql Server(本例中为 sql 2

wstcl的博客 2193

Android 使用sqlcipher加密和解密数据库(包括加密和解密已有的数据库,还有如何查看数据库教程)

我们知道Android系统有一个内嵌的SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作,SQLite是一个轻量级的、跨平台的、开源的嵌入式数据库引擎,也是一个关系型的的使用SQL语句的数据库引擎,读写效率高、资源消耗总量少、延迟时间少,使其成为移动平台数据库的最佳解决方案(如Android、iOS)

UrasakiNakajima的博客 6099

从零开始——开发一个安卓GIS采集软件——1.前期工作

一、需求分析 由于工作需要,接到这么一个开发地理信息采集的软件,并由于买不起MAC所以采用安卓端的开发。 1. 项目简介: 今年接到有关地理信息标准化的任务,需要先采集现有地理信息进行整理。 需要采集的信息主要为门牌号及建筑类型。 2. 软件要求: 能加载Arcgis所使用的地图格式,如tif,tpk,shp等。 使用shp文件格式采集相关字段的信息,实现导入/导出/可编辑/查询。 拍照功能,及...

CodyLok 3620

Android 数据库加密

一 简介             SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的读写效率、资源消耗总量、延迟时间和整体简单性上具有的优越性,使其成为移动平台数据库的最佳解决方案(如Android、iOS)。Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作,具体就不详细说明了。        然而,Android平台自带的SQLite

Ricky 7255

安卓模拟器+SQLCipher:免Root解密微信聊天记录数据库实战

SQLite作为轻量级关系型数据库,因其嵌入式、零配置的特性,被广泛应用于移动应用本地数据存储。为保障用户隐私,开发者常使用SQLCipher这类开源库对数据库进行透明加密,其原理是基于AES算法对数据库文件进行整体加密,访问时需提供正确密钥。这项技术对于实现应用数据的本地安全存储具有重要价值,尤其在即时通讯、金融等涉及敏感信息的场景中。基于此,一种通过创建安卓模拟器沙盒环境,获取虚拟设备信息生成密钥,进而使用SQLCipher工具解密应用本地数据库的方案应运而生。本文聚焦于微信聊天记录备份这一具体需求,详

anjichan4261的博客 363

Android应用源码获取数据库数据并动态显示在APP.zip

这是一款很简洁的很小型的获取数据库中的数据并动态显示在APP上,还可以实现对数据的分析和使用图标展示信息的项目源码。代码很少但是功能很多,例如图表的展示和连接数据库。代码中每个文件几乎都有详细的说明,所以想学习的朋友可以很方便您的学习。(项目采用gbk编码)。

[Android初级]使用Sqlcipher对sqlite数据库进行加解密

在Android学习和开发的过程中,你我都可能遇到

消失的天空 2029

手把手教你用8位单片机IO口直接驱动WS2812灯带(附完整代码和避坑指南)

本文详细介绍了如何使用8位单片机IO口直接驱动WS2812灯带,包括硬件准备、时序生成、色彩引擎与特效算法的实现,以及调试技巧与性能优化。通过汇编语言优化和精确时序控制,实现高效的LED驱动和炫酷的彩虹灯效,适合嵌入式开发者和硬件爱好者参考。

weixin_42696271的博客 304

Could not find method net.sqlcipher.database.SQLiteDatabase.loadLibs

1. android使用SQLCipher,会引入他的2个或3个jar包,还有3个so。 loadLibs是sqlcipher.jar当中,提示找不到就是因为jar没打入apk eclipse设置:Project——Properties——Java Build Path——Order and Export,勾选自己需要的jar包 2. 同理当某些jar包只需要编译不报错,

布偶猫的博客 3937

5g LDPC编译码-LDPC编码

本文摘要:LDPC编码是5G业务信道的核心编码技术,属于线性分组码。5G中LDPC编码分为两种基图类型(BG1和BG2),通过码块分割、CRC处理等步骤实现。编码过程主要涉及校验矩阵生成和校验位计算,其中校验矩阵采用稀疏矩阵结构。文中详细介绍了5G LDPC编码的具体实现流程,包括码块分割规则、校验位生成方法,以及两种基图(BG1和BG2)在矩阵结构和参数设置上的差异,重点阐述了通过模块化方法求解校验比特位的技术路径。

weixin_38270585的博客 1367

开源光标主题实战:从Moshi Monsters到自定义指针的完整指南

光标主题是操作系统个性化的重要组成部分,它通过替换系统默认指针图标来改变视觉交互体验。其原理在于操作系统允许用户自定义指针资源文件,这些文件定义了不同状态下的光标图像。从技术价值看,一套设计良好的光标主题不仅能提升桌面美观度,还能增强用户的情感连接和操作愉悦感,是低成本高回报的数字幸福感提升方案。在应用场景上,无论是开发者、设计师还是普通用户,都可以通过更换光标主题来个性化工作环境。本文以热门的Moshi Monsters开源光标项目为例,深入解析了光标主题的设计逻辑、系统适配方案以及二次创作方法,涵盖了W

weixin_30879833的博客 587

Android sqlite数据库加密

Android sqlite数据库加密 需求背景 Android系统自带的SQlite是明文存储,不支持加密,这样如果一旦第三方拿到设备端的db文件,相当于暴露了一切,所在在这个背景前提下,不得不对数据库进行加密。 解决方案 项目中使用的是greendao数据库框架,而greendao是支持数据库加密的,采用的是开源的SQLCipher进行加密。 对sqlite数据库进行加密 1.由于greend...

不愿意透露姓名的同学 1164

从DBC到ARXML:详解DaVinci Configurator中通信栈的自动化配置逻辑

本文深入解析了Vector公司DaVinci Configurator工具如何将DBC文件自动转换为符合AUTOSAR标准的ARXML配置,详细介绍了从DBC到ARXML的映射逻辑、自动化配置的边界与陷阱,以及工程实践中的优化策略。帮助工程师高效配置汽车电子系统中的通信协议,提升项目开发效率。

weixin_30279671的博客 719

Bomb安卓云数据库学习之准备工作

直接讲!首先注册一个bmob帐号,www.bmob.cn。然后  我的控制台-创建应用-进入应用-左边列表最下面的设置-查看应用秘钥。android studio用户自动导入(推荐):1.在 Project 的 build.gradle 文件中添加 Bmob的maven仓库地址buildscript { repositories { jcenter() ...

tiankong150的博客 1724

6S大气校正模型说明

title: 6S大气校正 date: 2018-04-13 categories: 遥感图像处理 tags: 大气校正 6S辐射传输模型 6S(Second Simulation of Satellite Signal in the Solar Spectrum)辐射传输模型是由vermote E 和 Tanre D 等人用FORTRAN编写的适用于太阳反射波段(0.25~4um)的大...

qq_40974572的博客 9784

2026爬虫反爬终极对抗:AST解混淆+算法还原+Python复现全流程实战

本文分享了破解JS加密参数的完整流程,重点介绍AST解混淆和算法还原方法。针对电商网站常见的混淆手段(变量名混淆、控制流平坦化、字符串加密等),作者提出一套高效解决方案:通过AST解析还原可读代码,结合Chrome断点调试定位加密函数,最后用Python精准复现加密逻辑。文章包含具体的代码实现,如字符串数组还原的AST操作示例,并详细说明了从样本采集到验证测试的全流程。该方法已成功应用于10多个网站,将破解时间从一周缩短至一天,为处理JS加密参数提供了可复用的技术方案。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1527

数据仓库开发之路之一--准备工作

在数据仓库的开发过程中,需要熟悉大量的概念以及相关工具的使用,还需要了解宏观上的各种开发流程,串联起来完成最终的数据仓库项目的开发,本篇介绍一些准备工作,包括涉及到的工具介绍,以及开发过程的描述,记录学习研究的印记,并和大家讨论研究存在的相关问题。数据仓库的开发,是完全独立于OLTP系统的,也就是独立于当前各种应用的业务系统而作的分析项目,因此要包含从数据的迁移(提取)、变换、清洗、加载等ETL操...

ImezZ 7655

基于粒子群优化的PID控制在药液流量控制系统中的应用

本文提出了一种基于粒子群优化(PSO)的PID控制算法,用于药液流量控制系统。系统采用C37控制器和Codesys 2.3编程环境实现,通过传感器实时监测流量、压力和车速,并控制水泵占空比和电动球阀开度来精确调节药液流量。硬件配置包括FT-2000流量传感器、PT-3000压力传感器和MV-500电动球阀等。控制算法将PSO与PID结合,使用ITAE指标优化PID参数,在Codesys中实现了包含PSO优化循环、PID控制等功能的程序模块。该系统通过分层控制策略和智能优化算法,提高了药液流量控制的精度和响应

AI的内部世界的博客 250

Android studio引入外部SQLite数据库,获取数据库列表数据

Android studio引入外部SQLite数据库,获取数据库列表数据

NXBBC的博客 1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Android 开发准备工作

安卓开发是在eclipse环境下使用java代码开发的,环境和语言肯定要学,大部分安卓应用都需要涉及到数据库,安卓自带了数据库,但是还需要对数据库编程有一定的了解。 环境搭建   在开始之前,需要先准备以下环境以及程序   必备   Microsoft Windows XP/Microsoft Windows Vista操作系统   Android S...

djuu43473的博客 215

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

当一名测试工程师准备找工作时,你需要准备什么?(纯干货)

六七月毕业季,正是挺多公司开放招聘的时候,个人经历了一些大厂或小厂的面试也总结了一些信息,罗列一下权当抛砖引玉,希望能够稍微帮到一些准备或者正在找工作的朋友。

主要分享测试的学习资源,帮助快速了解测试行业,帮助想转行、进阶、小白成长为高级测试工程师。 833

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

安卓开发前的准备工作

安卓手机全球市场份额已经接近85%,成为了无处不在无所不能覆盖面最广的手机操作系统,所以我对安卓的学习也充满了信心,它终将成为自己的一技之长。 首先我们对Java和C++已经有了基础性的学习,具备了染指安卓开发的能力。在接触安卓前应该去复习更多的关于Java的知识。安卓的界面布局是跟网页设计差不多还有安卓开发环境的搭载,目前用的最多的是Eclipse,安装eclipse之前要安装...

weixin_30515513的博客 100

PC通过数据线读取android数据库(二) 安卓端开发

基于上一篇采用adb工具连接安卓的思路下,这一篇我们开始做安卓方面的数据准备。 因为我们要做的是Pc读取安卓的数据库,没有数据库可不行嘞,所以,让我们现在安卓应用上创建一个数据库。这里数据库的ORM框架我选择的是郭霖大神开发的SqLite 2.0框架,谁让我看他的第一行代码长大呢。创建了一个用户模型,如下: public class UserModel extends L...

war3ismylove的博客 880

Android7.0 数据拨号前的准备工作

背景 在介绍PhoneApp的创建过程时,我们知道为了支持双卡手机,PhoneFactory创建了两个Phone对象。 然而由于通信制式、功耗等的限制,目前底层的芯片厂商规定modem工作于DSDS模式下,于是同一时间内只有一个Phone具有上网的能力。 本文旨在揭示激活Phone拨号能力的过程,即讲述数据拨号前的准备工作。

橡果生长记的博客 8590

当一个测试工程师准备找工作,需要准备什么?

三四月份,正是挺多公司开放招聘的时候,个人经历了一些大厂或小厂的面试也总结了一些信息,罗列一下权当抛砖引玉,希望能够稍微帮到一些准备或者正在找工作的朋友。 前期准备: ...

cky8792的博客 496
上一篇: Android 如何全局获取Context
下一篇: apk反编译--------apktool和jadx的使用
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值