【问题标题】:how to know a sqlite database is encrypted or not如何知道 sqlite 数据库是否加密
【发布时间】:2023-03-06 19:21:01
【问题描述】:

众所周知,我们可以使用 sqlcipher 来加密数据库,我在一个 android 项目中使用它。出于某种原因,我不想再使用它了。

通过使用 sqlcipher_export 转换数据库。

所以我的问题是

  1. 有没有好办法让我检查数据库是否加密,从而决定是否需要解密。

2、如果出现意外情况(迁移过程中关机),我该怎么办?

【问题讨论】:

    标签: android sqlite sqlcipher


    【解决方案1】:

    直接查看数据库文件的前16个字节,如果等于字符串“SQLite format 3\000”则该文件未加密,为标准SQLite数据库。

    如果在 sqlcipher_export 期间发生某些事情并发生崩溃,原始数据库将保持不变。只需在后续启动时再次运行导出即可。

    【讨论】:

    • 谢谢。但想问更多关于 Q2 的信息。但是,如果在移动导出以替换原始的时发生了什么……我认为我们不能在这里做很多事情?
    • 您应该使用文件重命名来移动文件,使其成为原子操作。要么它会成功,要么如果发生操作系统崩溃,它就会失败。如果失败,原始文件将保持不变,您可以再次重新运行导出。您也可以考虑这样的事情:将 file.db 文件复制到 file.db.bak,将 plain.db 重命名为 file.db,删除 file.db.bak。在恢复时,如果您的应用程序看到 file.db.bak 存在,您可以假设移动以某种方式失败,将 file.db.bak 复制回 file.db 并重试导出。如果您认为正确,请采纳答案。
    【解决方案2】:

    将@StephenLombardos 字符串“SQLite format 3\000”放入UTF-8 byte counter 会返回为19 bytes

    因此,虽然他的回答是正确的,但需要稍作修改。

    我会读取前 17 个字节并检查它们是否等于 "SQLite format 3\0"

    如果上述陈述为真,那么您的 db 文件是未加密

    如果语句为假,那么您的数据库文件是加密的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多