You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flutter中如何加密SQLite数据库?附代码求加密方案及可用库

给Flutter SQLite数据库加密的方案

当然可以给你的数据库加密!你当前使用的是sqflite库来操作SQLite数据库,对应的加密方案最常用的是基于SQLCipher的sqflite_sqlcipher库——它完全兼容sqflite的API,修改成本极低,下面是具体的实现步骤:

1. 添加依赖

首先在你的pubspec.yaml文件中添加sqflite_sqlcipher依赖(可以使用最新版本):

dependencies:
  sqflite_sqlcipher: ^2.3.0
  path_provider: ^2.0.0 # 你已经在使用这个库,确保版本兼容

2. 修改数据库初始化代码

只需要替换原来的openDatabase方法为sqflite_sqlcipher提供的版本,并传入加密密钥即可,你的原有逻辑几乎不需要改动:

import 'package:sqflite_sqlcipher/sqflite.dart';
import 'package:path_provider/path_provider.dart';
import 'package:path/path.dart' as path;

initDb() async {
  final documentsDirectory = await getApplicationDocumentsDirectory();
  final dbPath = path.join(documentsDirectory.path, "test.db");
  
  // 传入加密密钥,开启数据库加密
  final theDb = await openDatabase(
    dbPath,
    version: 1,
    onCreate: _onCreate,
    password: "your_strong_secure_key_here", // 替换为你的高强度密钥
  );
  return theDb;
}

// 你的_onCreate方法可以保持完全不变
void _onCreate(Database db, int version) async {
  // 示例:创建一张用户表
  await db.execute(
    'CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL)',
  );
}

关键注意事项

  • 密钥强度很重要:不要使用简单的字符串作为密钥,建议生成一个随机的、至少16位以上的复杂字符串,避免被暴力破解。
  • 密钥不可丢失:一旦设置了加密密钥,后续打开数据库必须使用相同的密钥,否则将无法读取或修改数据库中的数据。
  • 跨平台支持sqflite_sqlcipher支持Android、iOS、Windows、macOS和Linux,完全适配Flutter的跨平台特性。

内容的提问来源于stack exchange,提问作者Raja Jawahar

火山引擎 最新活动