如何在 Flutter 中加密 SQLite 数据库?

Posted

技术标签:

【中文标题】如何在 Flutter 中加密 SQLite 数据库?【英文标题】:How to encrypt the SQLite database in Flutter? 【发布时间】:2018-10-18 08:02:20 【问题描述】:

我正在通过以下代码在 Flutter 中创建一个数据库,有什么方法可以加密数据库吗?

是否有任何可用于 Flutter 的库?

initDb() async 
    io.Directory documentsDirectory = await getApplicationDocumentsDirectory();
    String path = join(documentsDirectory.path, "test.db");
    var theDb = await openDatabase(path, version: 1, onCreate: _onCreate);
    return theDb;
  

【问题讨论】:

【参考方案1】:

Pointy Castle 似乎是目前首选的加密库。

【讨论】:

我们有和 SQLCipher 完全一样的东西吗?? @RajaJawahar 是的。见pub.dartlang.org/packages/flutter_sqlcipher 仅供参考 - 自 2020 年 3 月 16 日起,Pointy Castle 将不再维护。 @eimmer PointyCastle 已移至此处:github.com/bcgit/pc-dart 使用 SQLChieper 而不是 Pointy Castle 有什么优势?【参考方案2】:

当前 sqflite 使用平台提供的任何 sqlite 版本。有一个关于这里的讨论,你可以在这里关注: https://github.com/tekartik/sqflite/issues/32

我现在知道的唯一解决方案是https://github.com/QwilApp/encrypted_sqlite,它可以用作 sqflite 的替代品,正如您所说,它在本机端使用 SQLCipher

【讨论】:

嗨,@alextk 你可能想用你的图书馆更新这个答案pub.dev/packages/sembast谢谢! :) @DazChong 问题是关于加密 sqlite 数据库,sembast 是一个替代方案,但它不是没有 sql!【参考方案3】:

我今天也在找这样的图书馆。

最后我在 pub.dev 中找到了flutter_sqlcipher,确实解决了我的问题。

这里是它的描述。

这是一个 Flutter 插件,它捆绑和包装了 SQLCipher for android,它是 SQLite 的开源扩展,提供透明的 256 位 AES 数据库文件加密。

希望对你有帮助。

【讨论】:

警告:目前仅适用于 Android。 (ios 支持计划中。) Source

以上是关于如何在 Flutter 中加密 SQLite 数据库?的主要内容,如果未能解决你的问题,请参考以下文章

如何在flutter的sqlite数据库中保存嵌套的复杂JSON数据

如何在 Flutter 中使用预填充的 sqlite 数据库我的应用程序

如何使用 aes 算法加密 sqlite 文件?

Flutter应用打开时如何从sqlite数据库加载初始状态数据

核心数据 SQLite 加密?

如何将数据保存到sqlite当没有网络并在flutter中恢复网络连接后发送到服务器