sqlcipher java_纯java环境下sqlsqlcipher解密sqlite数据库文件
由于工作需要,最近一周以来研究sqlite数据库文件的解密方法。最终采用sqlcipher工具进行解密。由于sqlcipher的实现大多是支持android的,修改为纯java平台下的代码有难度,因此选择了通过sqlcipher脚本执行解密的方案。从调研到最终发布,共尝试了ubuntu,windows8, centos7这三种系统下的解密。
sqlcipher解密命令:
>>sqlcipher test.db //连接数据库
>>pragma key = "123"; //密钥
>>.tables //查看当前数据库下的所有表
ubuntu:
1.sqlcipher软件安装。
apt-get install sqlcipher 即可完成。
2.编写.sh脚本,通过附加数据库的方式导出解密后的数据库。
#!/bin/sh
#文件路径
path=$1;
#文件名
fileName=$2
#密钥
key=$3;
#导出文件名
outName=$4
echo "=======开始解密=========";
echo "输入参数为:"${path}" "${fileName}" "${key}" "${outName}
temp="\""${path}${outName}".db""\"";
temp2="('"${outName}"')";
#echo "导出文件路径:"${temp};
#如果导出文件已存在,则删除
outPath=${path}${outName}".db";
if [ -f $outPath ]
then echo "导出文件已存在,将会覆盖!";
rm -rf $outPath;
fi
#执行sqlcipher命令
echo "开始执行sqlcipher命令"
sqlcipher ${path}${fileName} << EOF;
PRAGMA key = ${key};
attach database ${temp} as ${outName} key '';
select sqlcipher_export ${temp2};
detach database ${outName};
EOF
echo "=======解密完成=======";
windows8
1.下载sqlcipher.exe文件。
2.编写.bat脚本,导出解密后的数据库
@echo off
::文件路径
set filePath=%1
::文件名
set fileName=%2
::密钥
set key=%3
::导出文件名
set outName=%4
::sqlcipher.exe文件的路径
set exePath=%5
echo ===============STARTING DECRYPT=============
echo Input_Params:%filePath% %fileName% %key% %outName% %exePath%
set temp='%filePath%%outName%.db'
set temp2=('%outName%')
echo Output_File_Path:%temp%
::如果导出文件已存在,则删除
set outPath=%filePath%%outName%.db
if exist %outPath% (
echo Output File is Exist, Will Overrite It!
del %outPath%
)
::执行sqlcipher命令
echo Run the Sqlcipher Commands
echo Current_Database:%filePath%%fileName%
%exePath% %filePath%%fileName% "PRAGMA key = %key%;attach database %temp% as %outName% key '';select sqlcipher_export %temp2%;detach database %outName%;"
echo ================FINISH DECRYPT==============
exit;
centos7
1.下载sqlcipher源码,编译之后会在sqlcipher文件夹下生成可执行文件sqlcipher.sh文件。
% git clone git://github.com/sqlcipher/sqlcipher.git
% cd sqlcipher
% ./configure --enable-tempstore=yes CFLAGS="-DSQLITE_HAS_CODEC" LDFLAGS="-lcrypto"
% make
2.测试
./sqlcipher test.db
其余见sqlcipher解密命令
java代码中调用.sh或.bat脚本
linux环境:
public static void execLinux(String cmd) throws Exception {
String[] cmdA = { "/bin/sh", "-c", cmd };
Process process = Runtime.getRuntime().exec(cmdA);
process.waitFor();
// 获取返回结果
LineNumberReader br = new LineNumberReader(new
InputStreamReader(process.getInputStream(),"UTF-8"));
String line;
while ((line = br.readLine()) != null) {
log.info(line);
}
}
windows环境:
public static void execWindows(String cmd) throws Exception {
Process process = Runtime.getRuntime().exec("cmd.exe /c start /b " + cmd);
process.waitFor();
// 获取返回结果
LineNumberReader br = new LineNumberReader(new
InputStreamReader(process.getInputStream(),"UTF-8"));
String line;
while ((line = br.readLine()) != null) {
log.info(line);
}
}
sqlcipher java_纯java环境下sqlsqlcipher解密sqlite数据库文件相关推荐
- java 安卓客户端开发_《安卓网络编程》之第一篇 java环境下模拟客户端、服务器端...
1.Socket简介 在网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个 ...
- Java环境下GDAL / OGR环境配置与入门
Java环境下GDAL / OGR环境配置与入门 0.概述 1.环境配置 1.1 开发环境下载 1.2 环境变量配置 1.3java工程配置 1.3.1新建Java工程 1.3.2添加GDAL的jar ...
- java 获取apk版本号_纯JAVA环境获取APK信息:包名,版本,版本号,大小,权限...
[实例简介] 纯JAVA环境获取APK信息:包名,版本,版本号,大小,权限... 代码讲解地址:http://blog.csdn.net/chillax_li/article/details/4185 ...
- Java微服务开发指南 -- Java环境下的微服务
Java环境下的微服务 本文涉及的内容,能让你学到什么? 本书适用于开发微服务的Java开发人员和架构师.我们在开始介绍微服务架构前,先讲述一些抽象的基本概念.不幸的是,使用新技术并不能神奇地解决分布 ...
- mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享
Mac环境下php操作mysql数据库的方法分享 今天在mac上搭建好了php的环境,我们就把php操作mysql数据库的方法分享给大家,有需要的小伙伴参考下. Mac本地环境搭建 在Mac系统,我们 ...
- java打包没有src_maven 打包时,src/main/java目录下的xml等资源文件没有打包进去的问题...
关于使用maven打包src/main/java中一些关于mybatis的xml都没有打包进去,导致war包启动不起来,在此记录一下,解决方法. 默认maven在src/main/java中只编译ja ...
- mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享_PHP教程
Mac环境下php操作mysql数据库的方法分享 今天在mac上搭建好了php的环境,我们就把php操作mysql数据库的方法分享给大家,有需要的小伙伴参考下. Mac本地环境搭建 在Mac系统,我们 ...
- 非域环境下使用证书部署数据库(SqlServer2008R2)镜像
非域环境下使用证书部署数据库(SqlServer2008R2)镜像 前言 部署数据库镜像一般有两种方式域环境下部署http://liulike.blog.51cto.com/1355103/33918 ...
- cache数据库和mysql_并发环境下,先操作数据库还是先操作缓存?
原标题:并发环境下,先操作数据库还是先操作缓存? 来源:捡田螺的小男孩 前言 在分布式系统中,缓存和数据库同时存在时,如果有写操作,先操作数据库还是先操作缓存呢?本文将分5种方案 展开阐述对比,谢谢阅 ...
最新文章
- .NET混淆器 Dotfuscator使用教程七:加强保护之改进重命名混淆
- Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
- 如何通过Maven的Tomcat插件运行Web工程
- uc浏览器将在印度推出电商服务
- 谷歌浏览器怎么登录及开启同步功能
- 栅格数据矢量化(附有完整代码)
- [古文观止]《相州昼锦堂记》(宋·欧阳修)
- Profinet Commander下载方法
- IDEA更改编码颜色/主题
- matlab分位数回归,分位数回归及其实例
- hadoop生态系统的详细介绍-详细一点
- 不一样的课程表,不一样的Excle--用Excle进行设计(42):排序所演绎的数据逻辑
- ubuntu 命令卡住_安装Win10和Ubuntu双系统
- 【吴恩达deeplearning.ai】3.2 特征点检测
- debconf-set-selections mysql_debconf 和 dpkg-preconfgure 的用法
- Phaser并发阶段器
- matlab画根轨迹的渐近线,根轨迹的渐近线.ppt
- Oracle 聚合实现小计、合计 (GROUP BY ROLLUP)
- 2.9CSS table属性
- CSU1020-真三国无双-模拟