Flutter数据加密插件aespack的使用

Flutter数据加密插件aespack的使用

aespack 使用 AES-CBC-PKCS5Padding。此库最初来自 react-native-aes-kit,我只是将各个平台的原生代码移植到 Flutter 中使其能够工作。

方法

加密
参数名 描述
text 明文
key 密钥,最大长度为16字节
iv 初始化向量,最大长度为16字节
解密
参数名 描述
text 密文
key 密钥,最大长度为16字节
iv 初始化向量,最大长度为16字节

如何使用

加密
import 'package:aespack/aespack.dart';
...

// 在异步方法内部
var text = 'Test';
var key = '0102030405060708';
var iv = '1112131415161718';
var result = await Aespack.encrypt(text, key, iv);
// result 是 'IOCQgs4aK+K4lVWSg/W81w=='
解密
import 'package:aespack/aespack.dart';
...

// 在异步方法内部
var text = 'IOCQgs4aK+K4lVWSg/W81w==';
var key = '0102030405060708';
var iv = '1112131415161718';
var result = await Aespack.decrypt(text, key, iv);
// result 是 'Test'

完整示例代码

以下是完整的示例代码,演示如何在 Flutter 应用程序中使用 aespack 插件进行加密和解密操作。

import 'dart:async';

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

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final String _text = 'Test';
  final String _key = '0102030405060708';
  final String _iv = '1112131415161718';
  String _encryptedString = '';
  String _decryptedString = 'Unknown';

  [@override](/user/override)
  void initState() {
    super.initState();
    initAesState();
  }

  Future<void> initAesState() async {
    String decryptedString;
    String encryptedString;

    try {
      encryptedString = await Aespack.encrypt(_text, _key, _iv) ?? '';
      decryptedString = await Aespack.decrypt(encryptedString, _key, _iv) ?? 'Failed to decrypt.';
    } on Exception {
      decryptedString = 'Failed to decrypt.';
      encryptedString = 'Failed to encrypt';
    }

    if (!mounted) return;

    setState(() {
      _decryptedString = decryptedString;
      _encryptedString = encryptedString;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('AesPack 示例应用'),
        ),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            children: [
              Text('明文: $_text\n'),
              Text('加密后: $_encryptedString\n'),
              Text('解密后: $_decryptedString\n'),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter项目中使用aespack插件来进行AES加密和解密的示例代码。aespack是一个用于AES加密和解密的Flutter插件。

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

dependencies:
  flutter:
    sdk: flutter
  aespack: ^1.0.0  # 请检查最新版本号

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

以下是一个完整的示例,展示了如何使用aespack插件进行AES加密和解密:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('AES Encryption/Decryption Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: AesExample(),
        ),
      ),
    );
  }
}

class AesExample extends StatefulWidget {
  @override
  _AesExampleState createState() => _AesExampleState();
}

class _AesExampleState extends State<AesExample> {
  final TextEditingController _plainTextController = TextEditingController();
  final TextEditingController _keyController = TextEditingController();
  final TextEditingController _encryptedText = TextEditingController();
  final TextEditingController _decryptedText = TextEditingController();

  String _encrypt() {
    String plainText = _plainTextController.text;
    String key = _keyController.text;
    
    try {
      String encrypted = AES.encrypt(plainText, key);
      _encryptedText.value = TextEditingValue(text: encrypted, selection: TextSelection.collapsed(offset: encrypted.length));
      return encrypted;
    } catch (e) {
      return 'Error: $e';
    }
  }

  String _decrypt() {
    String encryptedText = _encryptedText.text;
    String key = _keyController.text;

    try {
      String decrypted = AES.decrypt(encryptedText, key);
      _decryptedText.value = TextEditingValue(text: decrypted, selection: TextSelection.collapsed(offset: decrypted.length));
      return decrypted;
    } catch (e) {
      return 'Error: $e';
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: <Widget>[
        TextField(
          controller: _plainTextController,
          decoration: InputDecoration(labelText: 'Plain Text'),
        ),
        SizedBox(height: 16),
        TextField(
          controller: _keyController,
          decoration: InputDecoration(labelText: 'Encryption Key'),
        ),
        SizedBox(height: 16),
        ElevatedButton(
          onPressed: () {
            String encrypted = _encrypt();
            print('Encrypted: $encrypted');
          },
          child: Text('Encrypt'),
        ),
        SizedBox(height: 16),
        TextField(
          controller: _encryptedText,
          decoration: InputDecoration(labelText: 'Encrypted Text', readOnly: true),
        ),
        SizedBox(height: 16),
        ElevatedButton(
          onPressed: () {
            String decrypted = _decrypt();
            print('Decrypted: $decrypted');
          },
          child: Text('Decrypt'),
        ),
        SizedBox(height: 16),
        TextField(
          controller: _decryptedText,
          decoration: InputDecoration(labelText: 'Decrypted Text', readOnly: true),
        ),
      ],
    );
  }
}

// 注意:Column 需要包裹在一个合适的父容器中,例如 SingleChildScrollView 和 Container。
// 这里为了简化示例,我省略了这些包装。在实际应用中,请确保布局正确。

注意事项

  1. 安全性:在实际应用中,不要将密钥硬编码在客户端代码中。考虑使用安全存储(如Keystore或Keychain)来管理密钥。
  2. 错误处理:示例代码中的错误处理非常基础。在实际应用中,可能需要更复杂的错误处理和用户反馈。
  3. 依赖更新:请确保你使用的是aespack插件的最新版本,并根据需要更新代码以匹配API更改。

这个示例代码展示了如何在Flutter应用中使用aespack插件进行AES加密和解密。你可以根据需要进行修改和扩展。

回到顶部