在 Flutter 中,本地加密存储的密钥获取通常依赖于第三方库,如 flutter_secure_storage 或 encrypted_shared_preferences。以下是常见方法:
1. 使用 flutter_secure_storage 库
该库利用平台原生密钥存储机制(如 iOS 的 Keychain、Android 的 Keystore)自动生成和管理密钥。无需手动获取密钥,数据会自动加密存储。
步骤:
- 添加依赖到
pubspec.yaml:dependencies:
flutter_secure_storage: ^9.0.0
- 使用示例:
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
final storage = FlutterSecureStorage();
// 写入加密数据
await storage.write(key: 'token', value: 'your_secret_data');
// 读取数据(自动解密)
String? value = await storage.read(key: 'token');
2. 使用 encrypted_shared_preferences 库
基于 shared_preferences,通过 AES 加密数据,密钥自动生成并存储在安全位置。
步骤:
- 添加依赖:
dependencies:
encrypted_shared_preferences: ^2.1.0
- 使用示例:
import 'package:encrypted_shared_preferences/encrypted_shared_preferences.dart';
final prefs = EncryptedSharedPreferences();
// 保存数据(自动加密)
await prefs.setString('key', 'sensitive_data');
// 读取数据(自动解密)
String data = await prefs.getString('key');
注意事项:
- 密钥管理:以上库自动处理密钥,无需手动获取。若需自定义密钥(如从服务器获取),需自行集成加密库(如
pointycastle)并安全存储密钥。
- 平台差异:iOS/Android 使用系统安全存储,Web 环境依赖浏览器安全机制(如 IndexedDB)。
- 安全建议:避免硬编码密钥,优先使用自动生成的密钥。
如需手动处理密钥,建议结合加密库和安全存储方案,但复杂度较高。推荐使用上述库简化流程。