Flutter AES ECB PKCS5加密插件flutter_aes_ecb_pkcs5的使用

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

Flutter AES ECB PKCS5加密插件 flutter_aes_ecb_pkcs5 的使用

简介

flutter_aes_ecb_pkcs5 是一个用于在Flutter应用中进行AES-128位加密和解密的插件。它支持生成AES密钥、加密数据以及解密数据。该插件在Android端使用Java开发,在iOS端使用Objective-C开发。

使用步骤

1. 添加依赖

在您的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter_aes_ecb_pkcs5: ^0.1.2

2. 安装依赖

您可以通过命令行安装包:

$ flutter pub get

或者,您的编辑器可能支持flutter pub get,请查阅编辑器文档了解更多。

3. 导入包

现在,在Dart代码中可以导入并使用这个包了:

import 'package:flutter_aes_ecb_pkcs5/flutter_aes_ecb_pkcs5.dart';

示例Demo

下面是一个完整的示例代码,展示了如何使用flutter_aes_ecb_pkcs5进行AES加密和解密。

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter_aes_ecb_pkcs5/flutter_aes_ecb_pkcs5.dart';

void main() => runApp(MyApp());

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

class _MyAppState extends State<MyApp> {
  String _platformVersion = 'Unknown';

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

  // 初始化状态
  Future<void> initPlatformState() async {
    String pkcs5Progress;

    // 待加密的数据
    var data = "{\"username\":\"helloword\"}";

    // 生成16字节随机密钥
    var key = await FlutterAesEcbPkcs5.generateDesKey(128);

    print("create key: $key");

    // 加密数据
    var encryptText = await FlutterAesEcbPkcs5.encryptString(data, key!);

    print("encryptText : $encryptText");

    // 解密数据
    var decryptText = await FlutterAesEcbPkcs5.decryptString(encryptText!, key);

    print("decryptText : $decryptText");

    pkcs5Progress = "data:$data\n"
        "create key:$key\n"
        "encryptText :$encryptText\n"
        "decryptText :$decryptText\n";

    if (!mounted) return;

    setState(() {
      _platformVersion = pkcs5Progress;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('flutter_aes_ecb_pkcs5'),
        ),
        body: Center(
          child: Text('pkcs5Progress:\n $_platformVersion\n'),
        ),
      ),
    );
  }
}

运行结果示例

当运行上述示例时,您可能会看到如下输出:

data:{"username":"helloword"}
create key:DA8FD2693B652D587EEE51E7ADD9DBB8
encryptText :851544E224F6C1C7F560AB82889DE0DF66EEB6762AB836F4EE13E31100F0EA16
decryptText :{"username":"helloword"}

许可证

该插件遵循MIT许可证:http://opensource.org/licenses/MIT

请随意使用,并为开发做出贡献!


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

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_aes_ecb_pkcs5插件进行AES ECB PKCS5加密和解密的代码示例。首先,确保你已经在pubspec.yaml文件中添加了依赖项:

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

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

以下是一个完整的Flutter应用程序示例,展示如何使用flutter_aes_ecb_pkcs5进行加密和解密:

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

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

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

class _MyAppState extends State<MyApp> {
  final _controller = TextEditingController();
  final _key = Uint8List.fromList('1234567890abcdef'.codeUnits);  // 16字节密钥
  String _encryptedText = '';
  String _decryptedText = '';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('AES ECB PKCS5 Encryption/Decryption'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            children: [
              TextField(
                controller: _controller,
                decoration: InputDecoration(labelText: 'Enter text to encrypt'),
                maxLines: 4,
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () {
                  setState(() {
                    _encryptText();
                    _decryptText();
                  });
                },
                child: Text('Encrypt/Decrypt'),
              ),
              SizedBox(height: 16),
              Text('Encrypted Text: $_encryptedText'),
              SizedBox(height: 16),
              Text('Decrypted Text: $_decryptedText'),
            ],
          ),
        ),
      ),
    );
  }

  void _encryptText() {
    final aesEcbPkcs5 = AesEcbPkcs5();
    try {
      final encrypted = aesEcbPkcs5.encrypt(
        _controller.text,
        _key,
      );
      _encryptedText = base64Encode(encrypted);
    } catch (e) {
      _encryptedText = 'Error: ${e.toString()}';
    }
  }

  void _decryptText() {
    final aesEcbPkcs5 = AesEcbPkcs5();
    try {
      final encryptedBytes = base64Decode(_encryptedText);
      final decrypted = aesEcbPkcs5.decrypt(
        encryptedBytes,
        _key,
      );
      _decryptedText = decrypted;
    } catch (e) {
      _decryptedText = 'Error: ${e.toString()}';
    }
  }
}

// Helper function to encode Uint8List to Base64 string
String base64Encode(Uint8List data) {
  return base64.encode(data);
}

// Helper function to decode Base64 string to Uint8List
Uint8List base64Decode(String data) {
  return base64.decode(data);
}

注意事项:

  1. 密钥长度:AES ECB模式通常使用128位(16字节)的密钥。在示例中,我们使用了'1234567890abcdef'作为密钥。
  2. Base64编码:由于加密后的数据是二进制数据,在UI上显示时通常需要进行Base64编码。上面的代码示例中包含了简单的Base64编码和解码函数。
  3. 错误处理:在加密和解密过程中,捕获并显示可能的异常,以避免应用崩溃。

确保在实际应用中,密钥管理符合安全最佳实践,避免硬编码密钥,并考虑使用更安全的密钥管理方式,如密钥管理服务(KMS)。

回到顶部