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

Node.js 如何在windows平台下用nodejs制作加密的sqlite3数据库,node.js,encryption,sqlite,Node.js,Encryption,Sqlite,我想制作一个使用sqlite3作为数据库的小应用程序。我已经安装了sqlite3npm安装sqlite3并使用节点gyp重建它,以便与electron一起使用 现在我想对数据库进行加密,尤其是在windows平台中,Sqlite默认不提供加密数据库文件的方法。尝试这样做会带来很多问题。您必须使用AES256之类的东西对文件进行加密,然后在需要访问文件时必须对其进行解密,这意味着您必须在某处保留解密版本。您可以将其保存在内存中,但较大的数据库可能无法容纳在内存中,您还需要在SQLite库中实现这一

我想制作一个使用sqlite3作为数据库的小应用程序。我已经安装了sqlite3
npm安装sqlite3
并使用节点gyp重建它,以便与electron一起使用


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

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


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

是的,这是一个有点老的问题,不过如果有人仍然需要答案,这可能会对他们有所帮助

您可以使用来使用electron应用程序在sqlite3 DB上启用加密

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


const sequelize=new sequelize(null,null,“您的加密密钥”{
方言:“sqlite”,
方言模块路径:“@journeyapps/sqlcipher”,
存储:'path/to/db.sqlite'
})

这对我有用:)


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

回答如何加密数据库很大程度上取决于您需要加密的原因。因为有不同的方法来加密数据库或数据库中的数据(在某些表和/或行中)。我想对数据库文件进行密码保护,这样就不能窃听数据库文件。@manas请检查下面的答案。@manas您最终在Windows上为Electron使用了什么解决方案?很好的参考资料和代码示例。我对这个答案投了赞成票:)