diff --git a/pom.xml b/pom.xml index 7dfa890..0f59b56 100644 --- a/pom.xml +++ b/pom.xml @@ -94,12 +94,17 @@ 3.0.8 - + + + + + + - org.xerial + io.github.willena sqlite-jdbc - 3.28.0 + 3.35.4 diff --git a/src/main/java/minsecurity/identity/persist/sqlite/Sqlite.java b/src/main/java/minsecurity/identity/persist/sqlite/Sqlite.java index cd4d468..6a50d25 100644 --- a/src/main/java/minsecurity/identity/persist/sqlite/Sqlite.java +++ b/src/main/java/minsecurity/identity/persist/sqlite/Sqlite.java @@ -1,5 +1,8 @@ package minsecurity.identity.persist.sqlite; +import org.sqlite.mc.SQLiteMCConfig; +import org.sqlite.mc.SQLiteMCSqlCipherConfig; + import java.io.File; import java.sql.*; @@ -34,6 +37,10 @@ public class Sqlite { } + private String passwd2HexKey(){ + return String.format("x'%s'", passwd); + } + /** * 获取Sqlite object * @return Sqlite object @@ -70,8 +77,8 @@ public class Sqlite { new File(dbPath).mkdirs(); } String real_db_file = dbPath + db_file; - Class.forName("org.sqlite.JDBC"); - c = DriverManager.getConnection("jdbc:sqlite:" + real_db_file); + // 兼容sqlcipher + c = DriverManager.getConnection("jdbc:sqlite:" + real_db_file, SQLiteMCSqlCipherConfig.getV4Defaults().withKey(passwd2HexKey()).toProperties()); stmt = c.createStatement(); stmt.executeUpdate(table_create); stmt.close(); @@ -92,8 +99,8 @@ public class Sqlite { new File(filePath).mkdirs(); } String real_db_file = filePath + db_file; - Class.forName("org.sqlite.JDBC"); - c = DriverManager.getConnection("jdbc:sqlite:" + real_db_file); + // 兼容sqlcipher + c = DriverManager.getConnection("jdbc:sqlite:" + real_db_file, SQLiteMCSqlCipherConfig.getV4Defaults().withKey(passwd2HexKey()).toProperties()); stmt = c.createStatement(); stmt.executeUpdate(table_create); stmt.close(); @@ -111,7 +118,8 @@ public class Sqlite { try{ String real_db_file = db_path + db_file; Class.forName("org.sqlite.JDBC"); - c = DriverManager.getConnection("jdbc:sqlite:" + real_db_file); + // 兼容sqlcipher + c = DriverManager.getConnection("jdbc:sqlite:" + real_db_file, SQLiteMCSqlCipherConfig.getV4Defaults().withKey(passwd2HexKey()).toProperties()); // TODO 设置数据库最大连接数 return c; }catch (Exception ex){ diff --git a/src/main/java/minsecurity/identity/persist/sqlite/db/Db.java b/src/main/java/minsecurity/identity/persist/sqlite/db/Db.java index b39e543..d028be6 100644 --- a/src/main/java/minsecurity/identity/persist/sqlite/db/Db.java +++ b/src/main/java/minsecurity/identity/persist/sqlite/db/Db.java @@ -210,6 +210,7 @@ public final class Db { Connection c = Sqlite.getInstance().getConn(); String pubStr = "", priStr = "", certStr, prikeyRawByte = ""; int algo, sign; + if (identity.hasPrivateKey()){ byte[] priByte = identity.getPrikey().getBytes(); priStr = Base64.getEncoder().encodeToString(priByte); diff --git a/src/test/java/minsecurity/identity/sqlite/SqliteTest.java b/src/test/java/minsecurity/identity/sqlite/SqliteTest.java index 8f2f170..2aca043 100644 --- a/src/test/java/minsecurity/identity/sqlite/SqliteTest.java +++ b/src/test/java/minsecurity/identity/sqlite/SqliteTest.java @@ -1,5 +1,6 @@ package minsecurity.identity.sqlite; +import minsecurity.identity.persist.sqlite.Sqlite; import minsecurity.identity.persist.sqlite.SqliteUtil; import org.junit.Test; @@ -11,4 +12,38 @@ public class SqliteTest { System.out.println(SqliteUtil.home()); assertFalse(SqliteUtil.pathExists("/aaa/1.txt")); } + + @Test + public void TestSqliteOpen(){ + try{ + Sqlite.getInstance().openDefault(); + boolean res = SqliteUtil.pathExists("/home/zhengqi/min/identity/identity.db"); + if (!res){ + throw new Exception("no target db file!!"); + } + + String homePath = SqliteUtil.home(); + String filePath = homePath + "/test/"; + Sqlite.getInstance().open(filePath); + + boolean res1 = SqliteUtil.pathExists("/home/zhengqi/test/identity.db"); + if (!res1){ + throw new Exception("no target db file!!"); + } + }catch (Exception ex){ + System.out.println(ex.getMessage()); + } + } + + @Test + public void TestSqliteSetPasswd(){ + try{ + String newPasswd = "1DD29CA851E7B56E4697B0E1F08507293D761A05CE4D1B628663F411A8086D99"; + Sqlite.getInstance().setPasswd(newPasswd); + Sqlite.getInstance().open("/home/zhengqi/min/identity/"); + // Sqlite.getInstance().getConn(); + }catch (Exception ex){ + System.out.println(ex.getMessage()); + } + } } diff --git a/src/test/java/minsecurity/identity/sqlite/db/DBTest.java b/src/test/java/minsecurity/identity/sqlite/db/DBTest.java new file mode 100644 index 0000000..e9109b5 --- /dev/null +++ b/src/test/java/minsecurity/identity/sqlite/db/DBTest.java @@ -0,0 +1,4 @@ +package minsecurity.identity.sqlite.db; + +public class DBTest { +}