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

创建Java应用程序以解密Sqlcipher数据库,java,android,encryption,intellij-idea,sqlcipher,Java,Android,Encryption,Intellij Idea,Sqlcipher,我是Java编程新手,最近负责创建一个Java程序,该程序允许我们解密数据库的副本,以便我们可以检查它是否有错误。我做了一些研究,找到了解密所需的SQLite代码,以及如何将其包含在我的程序中,但我不确定如何获取数据库并创建数据库的解密副本 我正在使用Mac和Intellij IDE 我已经包括了到目前为止我已经提出的代码,我知道我将需要执行解密的代码,但我不确定我还需要什么。非常感谢您的任何建议/指导 import android.content.*; import net.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;");
}
AFAIK,net.sqlcipher.database.sqlitedatabase类除了拼写错误之外,还只能作为sqlcipher for Android的一部分使用,因此只能在Android上运行


对于您想要做的事情,运行SQLCipher命令行版本的shell脚本可能就足够了。无论如何,您需要使用它,尽管可能没有Java API。

您有这个标记的android。那真的是你计划解密的地方吗?Android应用程序通常不实现公共静态void main方法,这就是我为什么要问的原因。此外,您似乎正在尝试使用的用于Android的SQLCipher类是用于Android的,而不是桌面Java。我工作的公司有Android应用程序,我们需要能够访问在这些应用程序中创建的数据库,以便我们能够分析它们并查找错误。这并没有回答我的问题。你在问题中输入了一些代码。你是否打算在Android设备上运行此代码?很抱歉,我看错了问题。不,我们不是。我们将在MacBooks上运行代码,我将研究如何创建shell脚本以及如何设置SQLCipher的命令行版本。感谢您的帮助SQLCipher主页上说除了Android之外,Java是一个受支持的平台。这不是真的吗?@Michael:我没看到表中列出。即使它得到支持,也不会通过Android特定的类实现。SQLCipher for Android仅替换必要的Android类,而不是可重用的通用类,如Cursor。然而,Java没有Android的游标类。