Flutter数据加密插件flutter_encrypt_plus的使用

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

Flutter数据加密插件flutter_encrypt_plus的使用

支持的设备

  • Android
  • iOS
  • WEB
  • LINUX
  • macOS
  • Windows

安装

  1. 在你的pubspec.yaml文件中添加最新版本的包(并运行dart pub get):
dependencies:
  flutter_encrypt_plus:
  1. 导入该包并在你的Flutter应用中使用它。
import 'package:flutter_encrypt_plus/flutter_encrypt_plus.dart';

示例

加密字符串

String encodedString = encrypt.encodeString("string", "salt");

解密字符串

String decodedString = encrypt.decodeString(encodedString, "salt");

测试包

bool result = encrypt.testPackage();

完整示例Demo

以下是一个完整的示例,展示了如何在Flutter应用中使用flutter_encrypt_plus插件来加密和解密字符串。

import 'package:flutter/material.dart';
import 'package:flutter_encrypt_plus/flutter_encrypt_plus.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 Demo',
      theme: ThemeData(
        colorScheme: ColorScheme.fromSeed(seedColor: Colors.red),
        useMaterial3: true,
      ),
      home: const HomeScreen(),
    );
  }
}

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

  /// 加密字符串
  void encryptKey() {
    // 使用输入字符串和盐值进行加密
    String encrypted = encrypt.encodeString("Hello, World!", "mySalt");
    debugPrint(encrypted);
  }

  /// 解密字符串
  void decryptKey() {
    // 使用加密后的字符串和盐值进行解密
    String decrypted = encrypt.decodeString("encryptedValue", "mySalt");
    debugPrint(decrypted);
  }

  /// 测试插件功能
  void testPackage() {
    // 返回测试结果
    bool result = encrypt.testPackage();
    debugPrint(result.toString());
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              const Text("加密和解密字符串"),
              ElevatedButton.icon(
                onPressed: encryptKey,
                icon: const Icon(Icons.lock),
                label: const Text("加密"),
              ),
              ElevatedButton.icon(
                onPressed: decryptKey,
                icon: const Icon(Icons.lock_open),
                label: const Text("解密"),
              ),
              ElevatedButton.icon(
                onPressed: testPackage,
                icon: const Icon(Icons.check_circle),
                label: const Text("测试插件"),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_encrypt_plus插件进行数据加密和解密的示例代码。flutter_encrypt_plus是一个用于在Flutter应用中实现数据加密和解密的插件,它基于pointycastle库。

首先,确保你已经在pubspec.yaml文件中添加了flutter_encrypt_plus依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_encrypt_plus: ^x.y.z  # 请使用最新版本号

然后运行flutter pub get来安装依赖。

接下来是一个简单的示例,演示如何使用flutter_encrypt_plus进行AES加密和解密:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String plainText = "Hello, Flutter!";
  String encryptedText = "";
  String decryptedText = "";

  @override
  void initState() {
    super.initState();
    _encryptText();
  }

  Future<void> _encryptText() async {
    final key = FlutterEncrypt.generateKeyFromPassword('mySuperSecretKey123456', 256);
    final iv = FlutterEncrypt.generateIV();
    final encrypted = await FlutterEncrypt.encryptAES(plainText, key, iv: iv);

    setState(() {
      encryptedText = encrypted;
      // 存储密钥和IV以便解密时使用
      final keyString = FlutterEncrypt.keyToString(key);
      final ivString = FlutterEncrypt.ivToString(iv);
      _decryptText(keyString, ivString);
    });
  }

  Future<void> _decryptText(String keyString, String ivString) async {
    final key = FlutterEncrypt.stringToKey(keyString);
    final iv = FlutterEncrypt.stringToIV(ivString);
    final decrypted = await FlutterEncrypt.decryptAES(encryptedText, key, iv: iv);

    setState(() {
      decryptedText = decrypted;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Encrypt Plus Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Text('Plain Text:', style: TextStyle(fontSize: 18)),
              Text(plainText, style: TextStyle(fontSize: 16)),
              SizedBox(height: 16),
              Text('Encrypted Text:', style: TextStyle(fontSize: 18)),
              Text(encryptedText, style: TextStyle(fontSize: 16)),
              SizedBox(height: 16),
              Text('Decrypted Text:', style: TextStyle(fontSize: 18)),
              Text(decryptedText, style: TextStyle(fontSize: 16)),
            ],
          ),
        ),
      ),
    );
  }
}

代码解释:

  1. 依赖添加:确保在pubspec.yaml中添加了flutter_encrypt_plus依赖。
  2. 密钥和IV生成:使用FlutterEncrypt.generateKeyFromPasswordFlutterEncrypt.generateIV生成AES加密所需的密钥和初始化向量(IV)。
  3. 加密:使用FlutterEncrypt.encryptAES方法对明文进行加密。
  4. 解密:为了解密,需要将密钥和IV转换为字符串形式存储(实际应用中应考虑安全存储这些值),然后使用FlutterEncrypt.stringToKeyFlutterEncrypt.stringToIV方法将它们转换回密钥和IV对象,最后使用FlutterEncrypt.decryptAES方法进行解密。
  5. UI展示:在UI中展示明文、加密后的文本和解密后的文本。

请注意,在实际应用中,密钥和IV的管理至关重要,不应以明文形式存储在客户端应用中,以防止被恶意用户获取。通常,密钥应存储在服务器端或通过安全的方式管理。

回到顶部