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

mpgws1up  于 2023-08-06  发布在  SQLite
关注(0)|答案(4)|浏览(580)

我想做一个小electron应用程序,使用sqlite3作为数据库。安装sqlite3 npm install sqlite3并使用node-gyp重建它,以便使用它与电子到目前为止,一切顺利。
现在我想给数据库加密,特别是在windows平台下

2g32fytz

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 器的示例应用程序。

cczfrluj

cczfrluj2#

默认情况下,SQLite不提供加密数据库文件的方法。尝试这样做会带来很多问题。你必须用类似AES 256的东西加密文件,然后当你想访问它时,你必须解密文件,这意味着你必须在某个地方保存一个解密的版本。您可以将其保存在内存中,但较大的数据库可能不适合内存,您还需要在SQLite库中实现它。您可以创建一个临时文件,但这意味着解密版本将在数据库使用的任何时候都可以访问,如果您的应用程序意外崩溃,该文件可能无法清理,从而暴露您的数据。
有像sqlitecrypt或sqliteccipher这样的东西可以加密数据库,但是它们是sqlite的替代品。它们实现了相同的API,但它们通常是sqlite的分支。node-sqlite3模块支持sqlitecipher的构建,如下所示。
可以在数据库中加密数据。您需要生成一个带有密码的密钥,然后加密每列中的数据。将密钥上的密码设置为您希望用户用来解锁数据的密码。这并没有隐藏数据库的结构,我只认为这是一个实用的解决方案,当你有几列数据,你想加密,因为你仍然需要索引字段,以便能够查询数据。这对于密码管理器之类的东西很有用,其中用户名和密码是加密的字段,并且有一个与用户/通行证对相关联的名称来描述其用途。您可以通过凭据名称进行查询,但用户名和密码只能通过密码访问。

mcdcgff0

mcdcgff03#

通过大量的测试,我发现better-sqlite3实际上是一个完美的库,可以为Node.js和Electron添加SQLite3支持。因此,我继续使用SQLite3MultipleCiphers创建了一个扩展分支,它支持多种加密算法,如SQLCiphersqleet(ChaCha 20-Poly 1305)。它经过了良好的测试,速度快,几乎完美无瑕,就像原来的图书馆。
在这里试试:https://www.npmjs.com/package/better-sqlite3-multiple-ciphers

3duebb1j

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脚本数据库,您将看到内部指令/数据字。

相关问题