如何在windows平台下用nodejs制作加密的sqlite3数据库

man*_*nas 6 sqlite encryption node.js

我想制作一个使用 sqlite3 作为数据库的小型电子应用程序。我已经安装了 sqlite3。npm install sqlite3并使用 node-gyp 重建它,以便将它与电子一起使用,到目前为止效果很好。

现在我想加密数据库如何做到这一点,特别是在 Windows 平台上

Tha*_*ran 8

是的,这是一个老问题,但如果有人仍然想要答案,这可能会对他们有所帮助。

您可以使用@journeyapps/sqlcipher电子应用程序在您的 sqlite3 数据库上启用加密。

如果您使用任何 javascript ORM sequelize,您可以将其配置为@journeyapps/sqlcipher用作 sqlite3 数据库引擎,如下所示

const sequelize = new Sequelize(null, null, 'your-encryption-key', { dialect: 'sqlite', dialectModulePath: '@journeyapps/sqlcipher', storage: 'path/to/db.sqlite' })

这对我有用:)

是使用带有 sqlchiper 包装器的 sqlite3 的示例应用程序。


tst*_*rzl 2

Sqlite默认不提供加密数据库文件的方法。尝试这样做会带来很多问题。您必须使用 AES256 等加密文件,然后在想要访问该文件时必须解密该文件,这意味着您必须在某处保留解密版本。您可以将其保存在内存中,但较大的数据库可能无法容纳在内存中,您还需要在 SQLite 库中实现这一点。您可以创建一个临时文件,但这意味着在使用数据库时可以随时访问解密版本,并且如果您的应用程序意外崩溃,该文件可能无法清理,从而导致数据暴露。

有像 sqlitecrypt 或 sqlitecipher 之类的东西可以加密您的数据库,但它们是 sqlite 的替代品。它们实现相同的 API,但它们通常是 sqlite 的分支。该node-sqlite3模块支持构建 sqlitecipher,如此处所示

可以对数据库中的数据进行加密。您需要生成带有密码的密钥,然后加密每列中的数据。将密钥上的密码设置为您希望用户用来解锁数据的密码。这不会隐藏数据库的结构,我只认为当您有几列想要加密的数据时这将是一个实用的解决方案,因为您仍然需要索引字段才能查询数据。这对于密码管理器之类的东西很有用,其中用户名和密码是加密字段,并且有一个与用户/密码对关联的名称来描述其用途。您可以通过凭据名称进行查询,但用户名和密码只能通过密码访问。