如何在电子应用程序中加密SQLite DB?

时间:2019-04-14 16:22:21

标签: sqlite electron sqlcipher

我有一个电子应用程序,可将数据持久保存在存储在我的机器中的SQLite数据库中。我已经完成了CRUD操作的所有设置,并且该应用程序运行正常。现在,我需要加密SQLite数据库文件。我在网上搜索解决方案,但所有解决方案都是针对在Electron内部解密的预加密数据库。

要求是,用户将提供密码,应用程序将使用该密码来加密数据库文件,然后用户将提供密码以解密并执行CRUD操作

有什么想法要实现吗?

附言::我已经检查了SQLCipher文档,但没有找到所需的文件。到目前为止,我正在使用 sqlite3 节点模块执行CRUD

编辑1 :我尝试使用sqlite-cipher模块,并且能够在单独的js文件中加密数据库。但是,当我将其与电子ipcMain集成在一起时,由于内存消耗很高,该应用程序将关闭。 有什么建议么???

2 个答案:

答案 0 :(得分:2)

如果您使用 SQLite,最好的选择是使用 SQLCipher。问题是您必须编译新的二进制文件才能工作,并且节点的 SQLite 和 SQLcipher 版本存在一些限制。

您可以使用这个包:https://github.com/journeyapps/node-sqlcipher

或手动编译,这里有一个示例 https://gist.github.com/aguynamedben/14253e34bc7e0a881d99c8e45eb45a47

答案 1 :(得分:1)

电子应用程序中的加密是一件棘手的事情。 这是因为它会给您带来虚假的安全感。

您可能会加密本地数据库,但是使用电子可以很容易地将其解密回来,也许这根本不值得吗? 获取电子应用程序的来源非常容易。缩小仅起到一点作用,但这并不是真正的保护。

您可以采用多种方法,但具体情况因情况而异。 需要回答的问题是:

  • 您要阻止谁?
  • 对安全性至关重要,或者这只是基本措施,因此并非所有人都能首先从db获取数据 一眼?
  • 使用该应用的用户是否对 机?
  • 您是直接通过电子应用访问数据库还是其他 一种系统范围的服务(守护进程)正在与db通信, 将结果传递给电子应用。
  • 如果先前的回答是“是”,您如何沟通 电子应用程序提供服务以及如何确保安全?

看看源代码访问讨论:

https://github.com/electron/electron/issues/3041

并检查本文(尤其是安全性部分):

https://hackernoon.com/electron-the-bad-parts-2b710c491547