由于工作需要,最近一周以来研究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数据库文件相关推荐

  1. java 安卓客户端开发_《安卓网络编程》之第一篇 java环境下模拟客户端、服务器端...

    1.Socket简介 在网络上的两个程序通过一个双向的通信连接实现数据的交换,这个双向链路的一端称为一个Socket.Socket通常用来实现客户方和服务方的连接.Socket是TCP/IP协议的一个 ...

  2. Java环境下GDAL / OGR环境配置与入门

    Java环境下GDAL / OGR环境配置与入门 0.概述 1.环境配置 1.1 开发环境下载 1.2 环境变量配置 1.3java工程配置 1.3.1新建Java工程 1.3.2添加GDAL的jar ...

  3. java 获取apk版本号_纯JAVA环境获取APK信息:包名,版本,版本号,大小,权限...

    [实例简介] 纯JAVA环境获取APK信息:包名,版本,版本号,大小,权限... 代码讲解地址:http://blog.csdn.net/chillax_li/article/details/4185 ...

  4. Java微服务开发指南 -- Java环境下的微服务

    Java环境下的微服务 本文涉及的内容,能让你学到什么? 本书适用于开发微服务的Java开发人员和架构师.我们在开始介绍微服务架构前,先讲述一些抽象的基本概念.不幸的是,使用新技术并不能神奇地解决分布 ...

  5. mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享

    Mac环境下php操作mysql数据库的方法分享 今天在mac上搭建好了php的环境,我们就把php操作mysql数据库的方法分享给大家,有需要的小伙伴参考下. Mac本地环境搭建 在Mac系统,我们 ...

  6. java打包没有src_maven 打包时,src/main/java目录下的xml等资源文件没有打包进去的问题...

    关于使用maven打包src/main/java中一些关于mybatis的xml都没有打包进去,导致war包启动不起来,在此记录一下,解决方法. 默认maven在src/main/java中只编译ja ...

  7. mac php 连接mysql数据库_Mac环境下php操作mysql数据库的方法分享_PHP教程

    Mac环境下php操作mysql数据库的方法分享 今天在mac上搭建好了php的环境,我们就把php操作mysql数据库的方法分享给大家,有需要的小伙伴参考下. Mac本地环境搭建 在Mac系统,我们 ...

  8. 非域环境下使用证书部署数据库(SqlServer2008R2)镜像

    非域环境下使用证书部署数据库(SqlServer2008R2)镜像 前言 部署数据库镜像一般有两种方式域环境下部署http://liulike.blog.51cto.com/1355103/33918 ...

  9. cache数据库和mysql_并发环境下,先操作数据库还是先操作缓存?

    原标题:并发环境下,先操作数据库还是先操作缓存? 来源:捡田螺的小男孩 前言 在分布式系统中,缓存和数据库同时存在时,如果有写操作,先操作数据库还是先操作缓存呢?本文将分5种方案 展开阐述对比,谢谢阅 ...

最新文章

  1. .NET混淆器 Dotfuscator使用教程七:加强保护之改进重命名混淆
  2. Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析
  3. 如何通过Maven的Tomcat插件运行Web工程
  4. uc浏览器将在印度推出电商服务
  5. 谷歌浏览器怎么登录及开启同步功能
  6. 栅格数据矢量化(附有完整代码)
  7. [古文观止]《相州昼锦堂记》(宋·欧阳修)
  8. Profinet Commander下载方法
  9. IDEA更改编码颜色/主题
  10. matlab分位数回归,分位数回归及其实例
  11. hadoop生态系统的详细介绍-详细一点
  12. 不一样的课程表,不一样的Excle--用Excle进行设计(42):排序所演绎的数据逻辑
  13. ubuntu 命令卡住_安装Win10和Ubuntu双系统
  14. 【吴恩达deeplearning.ai】3.2 特征点检测
  15. debconf-set-selections mysql_debconf 和 dpkg-preconfgure 的用法
  16. Phaser并发阶段器
  17. matlab画根轨迹的渐近线,根轨迹的渐近线.ppt
  18. Oracle 聚合实现小计、合计 (GROUP BY ROLLUP)
  19. 2.9CSS table属性
  20. CSU1020-真三国无双-模拟

热门文章

  1. goudp文件传输服务器,golang udp服务端客户端例子
  2. c++趣味小程序_工具类小程序10天增长103万全复盘
  3. 新闻评副高职称条件计算机,新闻系列副高职称评审有哪些条件
  4. 跟踪源码运行流程---SpringMVC学习笔记(四)
  5. 使用dshow抓取摄像头数据时,回调函数时间为0的问题
  6. Rsync的使用方法
  7. 【原】UCS-2和UTF-8的互相转换
  8. Linux上的Shell之FAQ
  9. ASP.NET和C#中对XML的操作,以及简单的xml与xsl !
  10. 如何删除eclipse多余的工作空间