Flutter数据加密存储插件encrypt_shared_pref的使用

发布于 1周前 作者 h691938207 来自 Flutter

Flutter数据加密存储插件encrypt_shared_pref的使用

encrypt_shared_pref 是一个简单易用且功能强大的Flutter插件,用于在Android、iOS和Web平台上加密SharedPreferences。以下是该插件的主要特性、使用步骤以及完整的示例代码。

特性

  • 简单易用:提供简单的API来加密和解密SharedPreferences中的数据。
  • 可选加密:通过传递一个布尔值来选择是否加密数据。
  • 支持多种数据类型:支持String、int、bool、double、Map和List等常见数据类型。
  • 高级加密算法:使用AES-CBC-128算法进行加密。
  • 双重加密:同时加密键和值。

使用步骤

1. 添加依赖

在项目的 pubspec.yaml 文件中添加 encrypt_shared_pref 依赖:

dependencies:
  encrypt_shared_pref: ^[最新版本]
2. 导入库

在需要使用的Dart文件中导入 encrypt_shared_pref

import 'package:encrypted_shared_pref/encrypted_shared_pref.dart';

示例代码

以下是一个完整的示例,展示了如何使用 encrypt_shared_pref 插件来加密和解密不同类型的SharedPreferences数据。

import 'package:encrypt_shared_pref/encrypt_shared_pref.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Encrypted Shared Pref Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
        useMaterial3: true,
      ),
      home: SaveDataView(),
    );
  }
}

class SaveDataView extends StatefulWidget {
  [@override](/user/override)
  _SaveDataViewState createState() => _SaveDataViewState();
}

class _SaveDataViewState extends State<SaveDataView> {
  final SecureStorage _secureStorage = SecureStorage();

  // 保存数据
  Future<void> _saveData() async {
    // 保存字符串
    await _secureStorage.writeString("encryptedString", "This is a secure string", isEncrypted: true);
    // 保存整数
    await _secureStorage.writeInt("keyInt", 42, isEncrypted: true);
    // 保存布尔值
    await _secureStorage.writeBool("keyBool", true, isEncrypted: true);
    // 保存JSON对象
    await _secureStorage.writeJson("keyMap", {"name": "John", "age": 30}, isEncrypted: true);
    // 保存字符串列表
    await _secureStorage.writeStringList("keyList", ["apple", "banana", "orange"], isEncrypted: true);

    print("Data saved successfully!");
  }

  // 获取数据
  Future<void> _fetchData() async {
    // 获取字符串
    String? encryptedString = await _secureStorage.readString("encryptedString", isEncrypted: true);
    // 获取整数
    int? keyInt = await _secureStorage.readInt("keyInt", isEncrypted: true);
    // 获取布尔值
    bool? keyBool = await _secureStorage.readBool("keyBool", isEncrypted: true);
    // 获取JSON对象
    Map<String, dynamic>? keyMap = await _secureStorage.readJson("keyMap", isEncrypted: true);
    // 获取字符串列表
    List<String>? keyList = await _secureStorage.readStringList("keyList", isEncrypted: true);

    print("Fetched Data:");
    print("Encrypted String: $encryptedString");
    print("Key Int: $keyInt");
    print("Key Bool: $keyBool");
    print("Key Map: $keyMap");
    print("Key List: $keyList");
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Encrypted Shared Preferences Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            ElevatedButton(
              onPressed: _saveData,
              child: Text('Save Data'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _fetchData,
              child: Text('Fetch Data'),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter数据加密存储插件encrypt_shared_pref的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据加密存储插件encrypt_shared_pref的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,encrypt_shared_pref 是一个用于 Flutter 的插件,它结合了 shared_preferencesencrypt 库,提供了对 SharedPreferences 数据进行加密存储的能力。以下是如何在 Flutter 项目中使用 encrypt_shared_pref 的一个简单示例。

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 encrypt_shared_pref 依赖:

dependencies:
  flutter:
    sdk: flutter
  encrypt_shared_pref: ^x.y.z  # 请替换为最新版本号

然后运行 flutter pub get 以获取依赖。

2. 导入库

在你的 Dart 文件中导入必要的库:

import 'package:flutter/material.dart';
import 'package:encrypt_shared_pref/encrypt_shared_pref.dart';

3. 初始化加密存储

你需要初始化 EncryptSharedPreferences 实例,并设置加密密钥。注意,密钥应该保持安全,不应硬编码在代码中(这里仅作为示例)。

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 加密密钥(在实际应用中,应从安全存储中获取)
  final String encryptionKey = 'your-secure-key-here';

  // 初始化 EncryptSharedPreferences
  final encryptSharedPref = await EncryptSharedPreferences.getInstance(encryptionKey: encryptionKey);

  runApp(MyApp(encryptSharedPref: encryptSharedPref));
}

4. 使用加密存储

以下是如何存储和读取加密数据的示例:

class MyApp extends StatelessWidget {
  final EncryptSharedPreferences encryptSharedPref;

  MyApp({required this.encryptSharedPref});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Encrypt Shared Preferences Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  // 存储数据
                  await encryptSharedPref.setString('key', 'value');
                  print('Data saved');
                },
                child: Text('Save Data'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  // 读取数据
                  String? value = await encryptSharedPref.getString('key');
                  print('Data retrieved: $value');
                },
                child: Text('Retrieve Data'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

完整示例

将上述代码片段组合起来,你将得到一个完整的 Flutter 应用示例,展示如何使用 encrypt_shared_pref 插件进行数据的加密存储和读取:

import 'package:flutter/material.dart';
import 'package:encrypt_shared_pref/encrypt_shared_pref.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 加密密钥(在实际应用中,应从安全存储中获取)
  final String encryptionKey = 'your-secure-key-here';

  // 初始化 EncryptSharedPreferences
  final encryptSharedPref = await EncryptSharedPreferences.getInstance(encryptionKey: encryptionKey);

  runApp(MyApp(encryptSharedPref: encryptSharedPref));
}

class MyApp extends StatelessWidget {
  final EncryptSharedPreferences encryptSharedPref;

  MyApp({required this.encryptSharedPref});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Encrypt Shared Preferences Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  // 存储数据
                  await encryptSharedPref.setString('key', 'value');
                  print('Data saved');
                },
                child: Text('Save Data'),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  // 读取数据
                  String? value = await encryptSharedPref.getString('key');
                  print('Data retrieved: $value');
                },
                child: Text('Retrieve Data'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

这个示例展示了如何使用 encrypt_shared_pref 插件进行简单的加密存储和读取操作。在实际应用中,请确保加密密钥的安全存储和管理。

回到顶部