创建Java应用程序以解密Sqlcipher数据库

时间:2014-08-12 15:51:44

标签: java android encryption intellij-idea sqlcipher

我是Java编程的新手,最近负责创建一个Java程序,它允许我们解密数据库的副本,以便我们检查它是否有错误。我做了一些研究,发现了解密所需的SQLite代码以及如何将它包含在我的程序中,但我不确定如何获取数据库并创建数据库的解密副本。

我正在使用Mac和Intellij IDE。

我已经包含了我到目前为止提出的代码以及我知道我将需要执行解密的代码,但我不确定我还需要什么。非常感谢任何建议/指导。

import android.content.*;
import net.sqlcipher.database.SQLiteDatabase; 
import java.io.File;
import java.io.IOException;
import java.util.Scanner;


public class decrypt{

    public static void main(String[] args) {
        String dbPath;
        String passphrase;
        Scanner in = new Scanner(System.in);

        System.out.println("Please enter database path");
        dbPath = in.nextLine();

        System.out.println("Please enter passphrase");
        passphrase = in.nextLine();

        // so now i have the db path and the passphrase to go with it
        // below is the code I found that will be needed to decrypt a sqlcipher encrypted database


        db.rawExecSQL(String.format("ATTACH DATABASE '%s' AS plaintext KEY '%s';",
                                    newFile.getAbsolutePath(), passphrase));
        db.rawExecSQL("SELECT sqlcipher_export('plaintext')");
        db.rawExecSQL("DETACH DATABASE plaintext;");
}

1 个答案:

答案 0 :(得分:0)

AFAIK,net.sqlcipher.database.SQLiteDatabse类,除了拼写错误之外,仅作为SQLCipher for Android的一部分提供,因此只能在Android上运行。

对于您要执行的操作,运行SQLCipher命令行版本的shell脚本可能就足够了。无论如何,您需要使用something that will run on your desired platform,尽管可能没有Java API。