package org.sxkj.common.utils; import java.io.BufferedReader; import java.io.InputStreamReader; public class DbEncrypt { /** * 使用 SQLCipher 对数据库进行加密 * * @param originalDbPath 原始未加密数据库的路径 * @param newDbPath 新加密数据库的存储路径 * @param newDbPassword 新加密数据库的密码 * @return 加密是否成功 */ public static boolean encryptDatabase(String originalDbPath, String newDbPath, String newDbPassword) { try { // SQLCipher命令 String[] command = { "sqlcipher", originalDbPath, "-cmd", "PRAGMA key='';", // 空密钥,用于未加密的原数据库 "-cmd", String.format("ATTACH DATABASE '%s' AS encrypted KEY '%s';", newDbPath, newDbPassword), "-cmd", "SELECT sqlcipher_export('encrypted');", "-cmd", "DETACH DATABASE encrypted;", "-cmd", ".exit" }; // 执行命令 Process process = Runtime.getRuntime().exec(command); // 读取命令行输出 BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); String line; while ((line = reader.readLine()) != null) { System.out.println(line); } // 等待命令执行完成 process.waitFor(); reader.close(); // 检查执行结果 int exitCode = process.exitValue(); return exitCode == 0; } catch (Exception e) { e.printStackTrace(); return false; } } }