日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

sqlcipher java_纯java环境下sqlsqlcipher解密sqlite数据库文件

發布時間:2023/12/19 数据库 68 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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数据库文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。