Flutter如何实现应用数据的安全存储

在Flutter开发中,如何安全地存储敏感数据(如用户凭证或API密钥)?目前尝试了SharedPreferences,但听说它不够安全。有没有推荐的安全存储方案?比如Flutter Secure Storage是否可靠?具体实现时需要注意哪些加密或防破解措施?

2 回复

Flutter中数据安全存储可通过以下方式实现:

  1. 使用flutter_secure_storage插件存储敏感数据(如token、密码),基于Keychain(iOS)和Keystore(Android)。
  2. 非敏感数据用shared_preferences或本地文件存储,结合加密库(如encrypt)手动加密。
  3. 重要数据建议使用SQLite配合加密扩展(如SQLCipher)。

更多关于Flutter如何实现应用数据的安全存储的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中,应用数据的安全存储可以通过以下方法实现,确保敏感信息(如用户凭证、API 密钥)不被泄露:

1. 使用 flutter_secure_storage 包存储敏感数据

这个包利用平台原生安全机制(如 iOS 的 Keychain 和 Android 的 Keystore)加密存储数据。

  • 安装:在 pubspec.yaml 中添加依赖:
    dependencies:
      flutter_secure_storage: ^8.0.0
    
  • 示例代码
    import 'package:flutter_secure_storage/flutter_secure_storage.dart';
    
    final storage = FlutterSecureStorage();
    
    // 写入数据
    await storage.write(key: 'api_key', value: 'your_secret_key');
    
    // 读取数据
    String? value = await storage.read(key: 'api_key');
    
    // 删除数据
    await storage.delete(key: 'api_key');
    
  • 注意:在 Android 中,需在 AndroidManifest.xml 中配置 android:windowSecure 属性以防止截图泄露。

2. 结合 shared_preferences 和加密库存储非敏感数据

对于非关键数据(如用户设置),可使用 shared_preferences,但敏感数据需额外加密。

  • 使用 encrypt 包进行 AES 加密:
    dependencies:
      shared_preferences: ^2.2.2
      encrypt: ^5.0.1
    
  • 示例代码
    import 'package:shared_preferences/shared_preferences.dart';
    import 'package:encrypt/encrypt.dart';
    
    // 加密密钥(需安全存储,例如通过 flutter_secure_storage)
    final key = Key.fromUtf8('32-length-secure-encryption-key!!');
    final iv = IV.fromLength(16);
    final encrypter = Encrypter(AES(key));
    
    // 加密并存储
    String encrypted = encrypter.encrypt('sensitive_data', iv: iv).base64;
    final prefs = await SharedPreferences.getInstance();
    prefs.setString('encrypted_data', encrypted);
    
    // 解密读取
    String? encryptedData = prefs.getString('encrypted_data');
    if (encryptedData != null) {
      String decrypted = encrypter.decrypt64(encryptedData, iv: iv);
    }
    

3. 使用 Hive 数据库配合加密

Hive 是轻量级 NoSQL 数据库,支持 AES 加密整个盒子(Box)。

  • 安装
    dependencies:
      hive: ^2.2.3
      hive_flutter: ^1.1.0
    
  • 示例代码
    import 'package:hive/hive.dart';
    import 'package:hive_flutter/hive_flutter.dart';
    
    // 初始化 Hive 并打开加密盒子
    await Hive.initFlutter();
    var encryptionKey = Hive.generateSecureKey(); // 生成密钥
    final box = await Hive.openBox('secureBox', encryptionCipher: HiveAesCipher(encryptionKey));
    
    // 存储和读取数据
    box.put('user_token', 'encrypted_value');
    String? token = box.get('user_token');
    

4. 平台特定安全措施

  • Android:在 AndroidManifest.xml 中设置 android:exported="false",并使用 Keystore 管理密钥。
  • iOS:依赖 Keychain 的自动加密,确保应用卸载时数据清除(通过配置访问控制)。

最佳实践:

  • 避免硬编码密钥:从安全服务器动态获取或使用密钥管理服务。
  • 最小化敏感数据存储:仅存储必要信息,及时清理过期数据。
  • 测试安全漏洞:使用工具(如 MobSF)检查应用安全。

通过上述方法,可有效保护 Flutter 应用中的数据安全。根据需求选择合适方案,敏感数据优先使用 flutter_secure_storage

回到顶部