Hallo,
Ich habe eine kleines Testprogramm geschrieben in dem ich eine SQLite DB verschlüssle.
a) Leider kann ich nicht mit dem SQLite DB Browser auf das DB File zugreifen bzw.
b) kann auch keine mit dem DB Browser verschlüsselte Datenbank über sqlite einlesen.
Code Beispiel:
public class EncryptDB {
private static final Logger log = LogManager.getLogger(EncryptDB.class);
private final static String DATABASE = "jdbc:sqlite:file:Test.db";
private final static String DB_PASS = "test22";
public static void main(String[] args) {
log.debug("EncryptDB gestartet");
try {
Connection conn = DriverManager.getConnection(DATABASE);
SQLiteMCSqlCipherConfig config = new SQLiteMCSqlCipherConfig();
config.setUserVersion(4);
config.setKdfIter(256000);
config.setFastKdfIter(2);
config.setHmacPgno(HmacPgno.NATIVE);
config.setHmacSaltMask(58);
config.setLegacy(4);
config.setLegacyPageSize(4096);
config.setKdfAlgorithm(KdfAlgorithm.SHA512);
config.setHmacAlgorithm(HmacAlgorithm.SHA512);
config.setPlaintextHeaderSize(0);
config.setCipher(CipherAlgorithm.SQL_CIPHER);
config.setHmacUse(false);
config.enforceForeignKeys(true);
config.withKey(DB_PASS);
conn.setAutoCommit(false);
conn = DriverManager.getConnection(DATABASE,config.toProperties());
String sql = "CREATE TABLE IF NOT EXISTS \"Test\" (\r\n"
+ " \"ID\" INTEGER NOT NULL UNIQUE,\r\n"
+ " \"Name\" INTEGER,\r\n"
+ " PRIMARY KEY(\"ID\" AUTOINCREMENT)\r\n"
+ ")";
Statement stmt = conn.createStatement();
boolean rs = stmt.execute(sql);
sql = "INSERT INTO \"Test\" (Name) Values ('Tom')";
stmt = conn.createStatement();
rs = stmt.execute(sql);
sql = "SELECT * From Test";
stmt = conn.createStatement();
ResultSet rs1 = stmt.executeQuery(sql);
while (rs1.next()) {
log.debug("Result: "+rs1.getString(1));
}
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Ich nutze den SQLite DB Browser 3.12.2 (Version für SQLCipher)
sqlite-jdbc-3.37.2.jar
ad a) Passworteingabe in DB Browser akeptiert das Passwort nicht
ad b) erhalte ich die Fehlermeldung: [SQLITE_NOTADB] File opened that is not a database file (file is not a database)
Gibt es dafür eine Lösung oder sind die beiden Krypte Mechanismen gänzlich unverträglich.
Danke GGK