Flutter加密解密插件crypto_simple的使用

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

Flutter加密解密插件crypto_simple的使用

crypto_simple 是一个用于在Flutter中进行字符串加密和解密的轻量级且简单的库。本文将详细介绍如何使用该插件,包括安装、配置以及完整的示例代码。

安装包

首先,在你的 pubspec.yaml 文件中添加 crypto_simple 依赖:

dependencies:
  crypto_simple: ^3.0.2

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

添加导入

在需要使用的 Dart 文件中导入该插件:

import 'package:crypto_simple/crypto_simple.dart';

使用方法

1. 使用单例对象(Singleton)

配置对象

在应用启动时,设置 CryptoSimpleSingleton 对象的配置参数:

void main() {
  // 设置 CryptoSimpleSingleton 的配置参数
  CryptoSimpleSingleton(
    superKey: 2023,
    subKey: 47,
    secretKey: "MySecretKey! ;)", // 推荐使用
    encryptionMode: EncryptionMode.Randomized,
  );

  runApp(MyApp());
}

使用对象

通过单例对象进行加密和解密操作:

// 你的字符串值
String token = 'bearer 5@1#fG!';

// 加密 🛡️
String encodeResult = CryptoSimpleSingleton.instance.encryption(inputString: token);

// 解密 🕵️‍♂️
String decodeResult = CryptoSimpleSingleton.instance.decryption(encryptedString: encodeResult);

2. 使用经典对象(Classic Object)

你也可以创建一个普通的 CryptoSimple 对象来进行加密和解密:

// 创建并配置 CryptoSimple 对象
final CryptoSimple normalCrypto = CryptoSimple(
  superKey: 123,
  subKey: 22,
  secretKey: 'mySecretKey',
  encryptionMode: EncryptionMode.Randomized,
);

// 你的字符串值
String token = 'bearer 5@1#fG!';

// 加密 🛡️
String encodeResult = normalCrypto.encryption(inputString: token);

// 解密 🕵️‍♂️
String decodeResult = normalCrypto.decryption(encryptedString: encodeResult);

完整示例 Demo

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

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

void main() {
  /// 初始化 CryptoSimpleSingleton 对象
  CryptoSimpleSingleton(
      superKey: 2023,
      subKey: 47,
      secretKey: "M8tFjsv5tFH&#1e3vC",
      encryptionMode: EncryptionMode.Randomized);
  runApp(CryptoSimpleSingletonDemo());
}

class CryptoSimpleSingletonDemo extends StatelessWidget {
  const CryptoSimpleSingletonDemo({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    const String _title = 'CryptoSimpleSingleton Demo';
    return MaterialApp(
        title: _title,
        theme: ThemeData(primarySwatch: Colors.blue),
        home: CryptoSimpleSingletonDemoPage(title: _title));
  }
}

class CryptoSimpleSingletonDemoPage extends StatefulWidget {
  const CryptoSimpleSingletonDemoPage({Key? key, required this.title})
      : super(key: key);
  final String title;

  @override
  State<CryptoSimpleSingletonDemoPage> createState() =>
      _CryptoSimpleSingletonDemoPageState();
}

class _CryptoSimpleSingletonDemoPageState
    extends State<CryptoSimpleSingletonDemoPage> {
  late String token;
  late String encodeResult;
  late String decodeResult;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        floatingActionButton: FloatingActionButton(
            child: Icon(Icons.refresh), onPressed: () => restart()),
        appBar: AppBar(title: Text(widget.title), centerTitle: true),
        body: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.start,
            mainAxisSize: MainAxisSize.max,
            children: [
              ItemWidget(title: 'Token:', data: token),
              ItemWidget(title: 'Encoding:', data: encodeResult),
              ItemWidget(title: 'Decoding:', data: decodeResult),
            ]));
  }

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

  /// 设置初始值
  void initialValues() {
    token = 'bearer 5@1#fGa';
    encodeResult =
        CryptoSimpleSingleton.instance.encryption(inputString: token);
    decodeResult = CryptoSimpleSingleton.instance
        .decryption(encryptedString: encodeResult);
  }

  /// 重置值
  void restart() {
    initialValues();
    setState(() {});
  }
}

class ItemWidget extends StatelessWidget {
  const ItemWidget(
      {required this.data, required this.title, Key? key, this.color})
      : super(key: key);

  final String title;
  final String data;
  final Color? color;

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Row(
        children: [
          Text(
            title,
            style: TextStyle(fontWeight: FontWeight.bold),
          ),
          SizedBox(width: 8),
          Expanded(
            child: Text(
              data,
              style: TextStyle(fontStyle: FontStyle.italic),
            ),
          ),
        ],
      ),
    );
  }
}

这个示例展示了如何在 Flutter 应用中使用 crypto_simple 插件进行字符串的加密和解密,并通过 UI 显示结果。希望这些信息对你有所帮助!


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

1 回复

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


当然,以下是如何在Flutter项目中使用crypto_simple插件进行加密和解密的示例代码。crypto_simple是一个简单的加密解密库,支持AES、DES、RSA等算法。这里我们将重点展示如何使用AES算法进行加密和解密。

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

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

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

接下来,我们编写一个Flutter应用来演示如何使用crypto_simple进行AES加密和解密。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Crypto Simple Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController _plainTextController = TextEditingController();
  final TextEditingController _encryptedTextController = TextEditingController();
  final TextEditingController _decryptedTextController = TextEditingController();
  String? _key;
  String? _iv;

  @override
  void initState() {
    super.initState();
    // 生成一个随机的密钥和初始化向量(IV)
    _generateKeyAndIV();
  }

  void _generateKeyAndIV() {
    _key = CryptoUtils.generateRandomKeyForAES();
    _iv = CryptoUtils.generateRandomIVForAES();
  }

  void _encrypt() {
    String? plainText = _plainTextController.text;
    if (plainText != null && _key != null && _iv != null) {
      String encryptedText = AesEncryptor().encrypt(plainText, key: _key!, iv: _iv!);
      _encryptedTextController.text = encryptedText;
    }
  }

  void _decrypt() {
    String? encryptedText = _encryptedTextController.text;
    if (encryptedText != null && _key != null && _iv != null) {
      String decryptedText = AesEncryptor().decrypt(encryptedText, key: _key!, iv: _iv!);
      _decryptedTextController.text = decryptedText;
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Crypto Simple Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              controller: _plainTextController,
              decoration: InputDecoration(labelText: 'Plain Text'),
              maxLines: 5,
              expands: true,
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _encrypt,
              child: Text('Encrypt'),
            ),
            SizedBox(height: 16),
            TextField(
              controller: _encryptedTextController,
              decoration: InputDecoration(labelText: 'Encrypted Text'),
              maxLines: 5,
              expands: true,
              readOnly: true,
            ),
            SizedBox(height: 16),
            ElevatedButton(
              onPressed: _decrypt,
              child: Text('Decrypt'),
            ),
            SizedBox(height: 16),
            TextField(
              controller: _decryptedTextController,
              decoration: InputDecoration(labelText: 'Decrypted Text'),
              maxLines: 5,
              expands: true,
              readOnly: true,
            ),
            SizedBox(height: 16),
            Text('Key: $_key'),
            SizedBox(height: 8),
            Text('IV: $_iv'),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,用户可以在其中输入明文文本,然后点击“Encrypt”按钮对文本进行加密,加密后的文本会显示在下方的文本框中。用户还可以点击“Decrypt”按钮对加密后的文本进行解密,解密后的文本会显示在另一个下方的文本框中。

注意:

  1. AesEncryptor().encryptAesEncryptor().decrypt 方法分别用于加密和解密。
  2. _generateKeyAndIV 方法用于生成一个随机的AES密钥和初始化向量(IV)。在实际应用中,你应该安全地存储这些密钥和IV。
  3. 加密和解密过程中,密钥和IV必须匹配,否则解密会失败。

这个示例提供了一个基础框架,你可以根据实际需求进行扩展和修改。

回到顶部