我想做一个小electron应用程序,使用sqlite3作为数据库。安装sqlite3 npm install sqlite3并使用node-gyp重建它,以便使用它与电子到目前为止,一切顺利。现在我想给数据库加密,特别是在windows平台下
npm install sqlite3
2g32fytz1#
是的,这是一个有点老的问题,但如果有人仍然想要一个答案,这可能会帮助他们。您可以使用@journeyapps/sqlcipher在electron应用程序中启用sqlite3 DB上的加密。如果您使用任何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' })个这对我很有效:)Here是使用sqlite3和sqlchiper Package 器的示例应用程序。
@journeyapps/sqlcipher
sequelize
const sequelize = new Sequelize(null, null, 'your-encryption-key', { dialect: 'sqlite', dialectModulePath: '@journeyapps/sqlcipher', storage: 'path/to/db.sqlite' })
cczfrluj2#
默认情况下,SQLite不提供加密数据库文件的方法。尝试这样做会带来很多问题。你必须用类似AES 256的东西加密文件,然后当你想访问它时,你必须解密文件,这意味着你必须在某个地方保存一个解密的版本。您可以将其保存在内存中,但较大的数据库可能不适合内存,您还需要在SQLite库中实现它。您可以创建一个临时文件,但这意味着解密版本将在数据库使用的任何时候都可以访问,如果您的应用程序意外崩溃,该文件可能无法清理,从而暴露您的数据。有像sqlitecrypt或sqliteccipher这样的东西可以加密数据库,但是它们是sqlite的替代品。它们实现了相同的API,但它们通常是sqlite的分支。node-sqlite3模块支持sqlitecipher的构建,如下所示。可以在数据库中加密数据。您需要生成一个带有密码的密钥,然后加密每列中的数据。将密钥上的密码设置为您希望用户用来解锁数据的密码。这并没有隐藏数据库的结构,我只认为这是一个实用的解决方案,当你有几列数据,你想加密,因为你仍然需要索引字段,以便能够查询数据。这对于密码管理器之类的东西很有用,其中用户名和密码是加密的字段,并且有一个与用户/通行证对相关联的名称来描述其用途。您可以通过凭据名称进行查询,但用户名和密码只能通过密码访问。
node-sqlite3
mcdcgff03#
通过大量的测试,我发现better-sqlite3实际上是一个完美的库,可以为Node.js和Electron添加SQLite3支持。因此,我继续使用SQLite3MultipleCiphers创建了一个扩展分支,它支持多种加密算法,如SQLCipher和sqleet(ChaCha 20-Poly 1305)。它经过了良好的测试,速度快,几乎完美无瑕,就像原来的图书馆。在这里试试:https://www.npmjs.com/package/better-sqlite3-multiple-ciphers的
better-sqlite3
SQLCipher
sqleet
3duebb1j4#
何月感慨:
我的个人应用程序我有这个代码上“ NodeJS ”和ORM“SEQUELIZE”:更多信息https://sequelize.org/master/
const db_user = new Sequelize( database: "sdb", username: "", password: "mysecret", options: { dialect: "sqlite", dialectModulePath: '@journeyapps/sqlcipher', storage: "src/dbs/securedb.db", } ); // SQLCipher config db_user.query("PRAGMA cipher_compatibility = 4"); /*db_user.query("PRAGMA cipher_use_hmac = ON"); db_user.query("PRAGMA cipher_kdf_algorithm = PBKDF2_HMAC_SHA1"); db_user.query("PRAGMA cipher_hmac_algorithm = HMAC_SHA1"); db_user.query("PRAGMA cipher_page_size = 4096"); db_user.query("PRAGMA cipher = 'aes-256-cbc'"); db_user.query("PRAGMA kdf_iter = 256000"); db_user.query("PRAGMA cipher_plaintext_header_size = 0");*/ db_user.query("PRAGMA key = 'mysecret'"); async function connect(){ try { await db_user.authenticate(); return console.log('Connection has been established successfully.'); } catch (error) { return console.error('Unable to connect to the database:', error); } } function loadModels(){ var MdUser = db_user.define("user",{ id: { type: DataTypes.INTEGER, autoIncrement: true, allowNull: false, unique: true, primaryKey: true }, name:{ type: DataTypes.STRING, allowNull: false } }); db_user.sync( //{ force: true } { alter: true } ); } connect() .then(loadModels())
字符串使用数据库浏览器-SQLite https://sqlitebrowser.org您可以打开新的/已定义的SQL-chiper数据库。1.输入密码。(我的案例《mysecret》)1.默认SQLCipher为4。1.随时可用。;您可以使用HexDump Viewer比较/验证结果。在Win10 https://www.saltybrine.com/hexdump32.htm上使用1.请安装此应用程序。1.打开已编码数据库。(你会看到很多穿成炭的,但没有什么人类的字读)1.打开并比较一个NO脚本数据库,您将看到内部指令/数据字。
4条答案
按热度按时间2g32fytz1#
是的,这是一个有点老的问题,但如果有人仍然想要一个答案,这可能会帮助他们。
您可以使用
@journeyapps/sqlcipher
在electron应用程序中启用sqlite3 DB上的加密。如果您使用任何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' })
个这对我很有效:)
Here是使用sqlite3和sqlchiper Package 器的示例应用程序。
cczfrluj2#
默认情况下,SQLite不提供加密数据库文件的方法。尝试这样做会带来很多问题。你必须用类似AES 256的东西加密文件,然后当你想访问它时,你必须解密文件,这意味着你必须在某个地方保存一个解密的版本。您可以将其保存在内存中,但较大的数据库可能不适合内存,您还需要在SQLite库中实现它。您可以创建一个临时文件,但这意味着解密版本将在数据库使用的任何时候都可以访问,如果您的应用程序意外崩溃,该文件可能无法清理,从而暴露您的数据。
有像sqlitecrypt或sqliteccipher这样的东西可以加密数据库,但是它们是sqlite的替代品。它们实现了相同的API,但它们通常是sqlite的分支。
node-sqlite3
模块支持sqlitecipher的构建,如下所示。可以在数据库中加密数据。您需要生成一个带有密码的密钥,然后加密每列中的数据。将密钥上的密码设置为您希望用户用来解锁数据的密码。这并没有隐藏数据库的结构,我只认为这是一个实用的解决方案,当你有几列数据,你想加密,因为你仍然需要索引字段,以便能够查询数据。这对于密码管理器之类的东西很有用,其中用户名和密码是加密的字段,并且有一个与用户/通行证对相关联的名称来描述其用途。您可以通过凭据名称进行查询,但用户名和密码只能通过密码访问。
mcdcgff03#
通过大量的测试,我发现
better-sqlite3
实际上是一个完美的库,可以为Node.js和Electron添加SQLite3支持。因此,我继续使用SQLite3MultipleCiphers创建了一个扩展分支,它支持多种加密算法,如SQLCipher
和sqleet
(ChaCha 20-Poly 1305)。它经过了良好的测试,速度快,几乎完美无瑕,就像原来的图书馆。在这里试试:https://www.npmjs.com/package/better-sqlite3-multiple-ciphers的
3duebb1j4#
何月感慨:
我的个人应用程序我有这个代码上“ NodeJS ”和ORM“SEQUELIZE”:
更多信息https://sequelize.org/master/
字符串
使用数据库浏览器-SQLite https://sqlitebrowser.org
您可以打开新的/已定义的SQL-chiper数据库。
1.输入密码。(我的案例《mysecret》)
1.默认SQLCipher为4。
1.随时可用。;
您可以使用HexDump Viewer比较/验证结果。在Win10 https://www.saltybrine.com/hexdump32.htm上使用
1.请安装此应用程序。
1.打开已编码数据库。(你会看到很多穿成炭的,但没有什么人类的字读)
1.打开并比较一个NO脚本数据库,您将看到内部指令/数据字。