目前我正在使用带有SQLCipher的Oriteite over SQLite。 是否真的无法保护Room数据库不被读取???
答案 0 :(得分:17)
适用于Android的SQLCipher现在直接支持Room。您可以找到文档here
因此,@ CommonsWare将不再积极开发cwac-saferoom,并建议使用SQLCipher的支持
答案 1 :(得分:10)
Room默认将数据存储在应用程序的内部存储中,任何root用户都可以访问该文件。
如果您需要某些安全性,则需要使用加密库,如cwac-saferoom。
答案 2 :(得分:0)
Android Room DB明确不支持加密。典型的 SQLite数据库处于未加密状态。您可以将SQLCipher for Android与 Room或androidx.sqlite API的其他使用者来保护您的数据 存储在sqlite数据库中。 QLCipher在其中有一个
SupportFactory
类net.sqlcipher.database
软件包,可用于配置会议室 在Android上使用SQLCipher。请参阅标准SQLite数据库的十六进制转储 还有一个实现SQLCipher的软件。
~ sjlombardo$ hexdump -C sqlite.db
00000000 53 51 4c 69 74 65 20 66 6f 72 6d 61 74 20 33 00 |SQLite format 3.|
…
000003c0 65 74 32 74 32 03 43 52 45 41 54 45 20 54 41 42 |et2t2.CREATE TAB|
000003d0 4c 45 20 74 32 28 61 2c 62 29 24 01 06 17 11 11 |LE t2(a,b)$…..|
…
000007e0 20 74 68 65 20 73 68 6f 77 15 01 03 01 2f 01 6f | the show…./.o|
000007f0 6e 65 20 66 6f 72 20 74 68 65 20 6d 6f 6e 65 79 |ne for the money|
~ $ sqlite3 sqlcipher.db
sqlite> PRAGMA KEY=’test123′;
sqlite> CREATE TABLE t1(a,b);
sqlite> INSERT INTO t1(a,b) VALUES (‘one for the money’, ‘two for the show’);
sqlite> .quit
~ $ hexdump -C sqlcipher.db
00000000 84 d1 36 18 eb b5 82 90 c4 70 0d ee 43 cb 61 87 |.?6.?..?p.?C?a.|
00000010 91 42 3c cd 55 24 ab c6 c4 1d c6 67 b4 e3 96 bb |.B?..?|
00000bf0 8e 99 ee 28 23 43 ab a4 97 cd 63 42 8a 8e 7c c6 |..?(#C??.?cB..|?|
~ $ sqlite3 sqlcipher.db
sqlite> SELECT * FROM t1;
Error: file is encrypted or is not a database