Flutter数据加密解密插件encrypt_decrypt_plus的使用

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

Flutter数据加密解密插件encrypt_decrypt_plus的使用

Flutter是一个用于开发跨平台移动应用的框架,它允许开发者用一套代码库构建iOS和Android应用。在处理敏感数据时,数据加密解密是确保信息安全的重要手段之一。encrypt_decrypt_plus 是一个帮助开发者在Flutter项目中实现加密和解密操作的插件,支持AES和XOR等加密算法,并且可以对JWT token进行解码。

Installation 安装

要开始使用 encrypt_decrypt_plus 插件,首先需要将其添加为项目的依赖项。打开项目的 pubspec.yaml 文件,在dependencies下添加如下配置:

dependencies:
  ...
  encrypt_decrypt_plus: ^latest_version # 请替换为最新版本号

然后执行 flutter pub get 命令来安装该插件。

Example 示例

下面提供了一个完整的示例demo,演示如何使用 encrypt_decrypt_plus 实现AES-256-CBC加密和解密功能。

AES Encryption and Decryption AES 加密和解密

示例代码

import 'package:encrypt_decrypt_plus/encrypt_decrypt/aes.dart';
import 'package:flutter/material.dart';

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

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

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final String _plainTxt = "Hello datadirr";
  String? _encryptTxt = "";
  String? _decryptTxt = "";
  final AES _aes = AES(
      secretKey: "datadirrdatadirrdatadirrdatadirr", iv: "datadirrdatadirr");

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
          child: Center(
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: [
                Text("plainTxt: $_plainTxt"),
                ElevatedButton(
                    onPressed: () {
                      _encryptAES256CBC();
                    },
                    child: const Text("Encrypt")),
                Text("encryptTxt: $_encryptTxt"),
                ElevatedButton(
                    onPressed: () {
                      _decryptAES256CBC();
                    },
                    child: const Text("Decrypt")),
                Text("decryptTxt: $_decryptTxt"),
              ],
            ),
          ),
        ),
      ),
    );
  }

  void _encryptAES256CBC() async {
    _encryptTxt = _aes.encryptAES256CBC(_plainTxt);
    setState(() {});
  }

  void _decryptAES256CBC() async {
    _decryptTxt = _aes.decryptAES256CBC(_encryptTxt ?? "");
    setState(() {});
  }
}

这个例子创建了一个简单的Flutter应用程序,其中包含两个按钮:一个用于加密文本,另一个用于解密文本。当用户点击“Encrypt”按钮时,程序会调用 _encryptAES256CBC() 方法对明文进行加密;当用户点击“Decrypt”按钮时,则会调用 _decryptAES256CBC() 方法对密文进行解密。加密和解密的结果会显示在界面上。

XOR Encryption and Decryption XOR 加密和解密

除了AES加密方式外,encrypt_decrypt_plus 还提供了XOR加密方法。XOR加密是一种简单但有效的加密技术,它通过对每个字符与密钥进行异或运算来加密数据。以下是几种不同的使用XOR加密的方法:

  1. With Secret Key 使用密钥

    • Method 1 方法1

      XOR xor = XOR(secretKey: "datadirr");
      String encryptTxt = xor.xorEncode("Hello datadirr");
      String decryptTxt = xor.xorDecode(encryptTxt);
      
    • Method 2 方法2

      XOR xor = XOR();
      String encryptTxt = xor.xorEncode("Hello datadirr", secretKey: "datadirr");
      String decryptTxt = xor.xorDecode(encryptTxt, secretKey: "datadirr");
      
    • Method 3 方法3

      String encryptTxt = XOR().xorEncode("Hello datadirr", secretKey: "datadirr");
      String decryptTxt = XOR().xorDecode(encryptTxt, secretKey: "datadirr");
      
    • Method 4 方法4

      String encryptTxt = XOR(secretKey: "datadirr").xorEncode("Hello datadirr");
      String decryptTxt = XOR(secretKey: "datadirr").xorDecode(encryptTxt);
      
  2. Without Secret Key 不使用密钥

    • Method 1 方法1

      XOR xor = XOR();
      String encryptTxt = xor.xorEncode("Hello datadirr");
      String decryptTxt = xor.xorDecode(encryptTxt);
      
    • Method 2 方法2

      String encryptTxt = XOR().xorEncode("Hello datadirr");
      String decryptTxt = XOR().xorDecode(encryptTxt);
      

以上就是关于 encrypt_decrypt_plus 插件的基本介绍和使用示例,希望可以帮助到您!如果您有任何问题或建议,请随时访问 官方文档 或查看 GitHub上的示例


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

1 回复

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


当然,以下是如何在Flutter项目中使用encrypt_decrypt_plus插件进行数据加密和解密的示例代码。encrypt_decrypt_plus插件允许你使用AES、RSA等加密算法对数据进行加密和解密。

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

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

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

接下来,编写一个示例Flutter应用,展示如何使用encrypt_decrypt_plus插件。

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

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

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

class _MyAppState extends State<MyApp> {
  final _controller = TextEditingController();
  String? encryptedData;
  String? decryptedData;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Encrypt Decrypt Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              TextField(
                controller: _controller,
                decoration: InputDecoration(labelText: 'Enter text to encrypt'),
                maxLines: 4,
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  final encryptDecrypt = EncryptDecrypt();
                  String key = 'my_secret_key_123456'; // 16, 24, or 32 bytes key for AES
                  String iv = 'my_iv_1234567890123456'; // 16 bytes IV for AES

                  // Encrypt
                  String encrypted = await encryptDecrypt.aesEncrypt(
                    _controller.text,
                    key,
                    iv,
                  );
                  setState(() {
                    encryptedData = encrypted;
                    decryptedData = null;
                  });
                },
                child: Text('Encrypt'),
              ),
              SizedBox(height: 16),
              if (encryptedData != null)
                Text(
                  'Encrypted Data: $encryptedData',
                  style: TextStyle(color: Colors.blue),
                ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: () async {
                  if (encryptedData == null) return;
                  final encryptDecrypt = EncryptDecrypt();
                  String key = 'my_secret_key_123456'; // 16, 24, or 32 bytes key for AES
                  String iv = 'my_iv_1234567890123456'; // 16 bytes IV for AES

                  // Decrypt
                  String decrypted = await encryptDecrypt.aesDecrypt(
                    encryptedData!,
                    key,
                    iv,
                  );
                  setState(() {
                    decryptedData = decrypted;
                  });
                },
                child: Text('Decrypt'),
              ),
              SizedBox(height: 16),
              if (decryptedData != null)
                Text(
                  'Decrypted Data: $decryptedData',
                  style: TextStyle(color: Colors.green),
                ),
            ],
          ),
        ),
      ),
    );
  }
}

代码说明:

  1. 依赖安装:在pubspec.yaml中添加encrypt_decrypt_plus依赖,并运行flutter pub get

  2. UI设计

    • 使用TextField让用户输入要加密的文本。
    • 使用两个ElevatedButton分别触发加密和解密操作。
    • 使用Text显示加密和解密后的数据。
  3. 加密和解密

    • 创建EncryptDecrypt实例。
    • 使用AES算法加密和解密数据,需要指定密钥(key)和初始化向量(IV)。
    • aesEncrypt方法用于加密,aesDecrypt方法用于解密。
  4. 状态管理

    • 使用TextEditingController管理文本输入。
    • 使用setState更新UI状态,显示加密和解密后的数据。

注意:在实际应用中,密钥和IV的管理非常重要,不要硬编码在代码中,应该使用安全的方式存储和管理。

回到顶部