flutter_secure_storage

一个用于将数据存储在安全存储中的 Flutter 插件

  • Keychain 用于 iOS
  • AES 加密用于 Android。AES 密钥使用 RSA 加密,RSA 密钥存储在 KeyStore
  • 使用 V5.0.0,我们可以在 Android 上使用 EncryptedSharedPreferences,方法是在 Android Options 中启用它,如下所示
  AndroidOptions _getAndroidOptions() => const AndroidOptions(
        encryptedSharedPreferences: true,
      );

有关更多信息,请参阅示例应用。

  • libsecret 用于 Linux。

注意 KeyStore 于 Android 4.3 (API level 18) 引入。插件将不适用于早期版本。

平台实现

请注意,此表显示了此存储库中实现的功能,并且可能尚未在 pub.dev 上发布更改。

读取 写入 delete 包含键 读取所有 删除所有
Android white_check_mark white_check_mark white_check_mark white_check_mark white_check_mark white_check_mark
iOS white_check_mark white_check_mark white_check_mark x white_check_mark white_check_mark
Windows white_check_mark white_check_mark white_check_mark white_check_mark white_check_mark white_check_mark
Linux white_check_mark white_check_mark white_check_mark x white_check_mark white_check_mark
macOS white_check_mark white_check_mark white_check_mark x white_check_mark white_check_mark
Web white_check_mark white_check_mark white_check_mark white_check_mark white_check_mark white_check_mark

入门

import 'package:flutter_secure_storage/flutter_secure_storage.dart';

// Create storage
final storage = new FlutterSecureStorage();

// Read value
String value = await storage.read(key: key);

// Read all values
Map<String, String> allValues = await storage.readAll();

// Delete value
await storage.delete(key: key);

// Delete all
await storage.deleteAll();

// Write value
await storage.write(key: key, value: value);

这使我们能够在应用处于后台时获取安全值,方法是指定 first_unlock 或 first_unlock_this_device。如果未指定,则默认值为 unlocked。
一个例子

final options = IOSOptions(accessibility: IOSAccessibility.first_unlock);
await storage.write(key: key, value: value, iOptions: options);

配置 Android 版本

[project]/android/app/build.gradle 中将 minSdkVersion 设置为 >= 18。

android {
    ...

    defaultConfig {
        ...
        minSdkVersion 18
        ...
    }

}

注意 默认情况下,Android 会在 Google Drive 上备份数据。这可能导致异常 java.security.InvalidKeyException:Failed to unwrap key。
您需要

配置 Web 版本

Flutter Secure Storage 使用实验性的 WebCrypto 实现。目前请自行承担风险使用。目的是浏览器创建私钥,因此,local_storage 中的加密字符串不能移植到其他浏览器或其他机器,并且仅在同一域下有效。

启用 HTTP 严格前向保密和为您的响应应用适当的标头非常重要,否则您可能会受到 JavaScript 劫持的攻击。

请参阅

配置 Linux 版本

您需要在您的机器上安装 libsecret-1-devlibjsoncpp-dev 来构建项目,并需要 libsecret-1-0libjsoncpp1 来运行应用程序(在打包您的应用程序后将其添加为依赖项)。如果您使用 snapcraft 构建项目,请按以下方式操作:

parts:
  uet-lms:
    source: .
    plugin: flutter
    flutter-target: lib/main.dart
    build-packages:
      - libsecret-1-dev
      - libjsoncpp-dev
    stage-packages:
      - libsecret-1-dev
      - libjsoncpp1-dev

配置 MacOS 版本

您还需要将 Keychain Sharing 添加为 macOS runner 的功能。

集成测试

example 目录运行以下命令:

flutter drive --target=test_driver/app.dart

GitHub

https://github.com/mogol/flutter_secure_storage