Flutter数据加密插件flutter_3des的使用

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

Flutter数据加密插件flutter_3des的使用

描述

flutter_3des 是一个Flutter实现的Triple DES (3DES)算法插件。该插件是对flutter_des的改进版本,提供了更稳定的三重DES加密解密功能,并且在Android和iOS平台上的结果与CryptoJS的结果进行了对比。

Android iOS

CryptoJS Implementation CryptoJS Output
CryptoJS Implementation CryptoJS Output

开始使用

添加依赖

pubspec.yaml文件中添加flutter_3des依赖:

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

实现代码

下面是一个完整的示例demo,演示如何使用flutter_3des进行字符串的加密和解密操作。

import 'package:flutter/material.dart';
import 'dart:async';
import 'dart:typed_data';
import 'package:flutter_3des/flutter_3des.dart';

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

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

const _string = "my name is flutter";

class _MyAppState extends State<MyApp> {
  static const _key = "702040801020305070B0D1101020305070B0D1112110D0B0";
  static const _iv = "070B0D1101020305";

  Uint8List? _encrypt;
  String _decrypt = '';
  String _encryptHex = '';
  String _decryptHex = '';
  String _encryptBase64 = '';
  String _decryptBase64 = '';
  String _text = _string;

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

  @override
  void dispose() {
    super.dispose();
  }

  // 平台消息是异步的,因此我们在一个异步方法中初始化。
  Future<void> init() async {
    if (_text.isEmpty) {
      _text = _string;
    }
    try {
      _encrypt = await Flutter3des.encrypt(_text, _key, iv: _iv);
      _decrypt = await Flutter3des.decrypt(_encrypt!, _key, iv: _iv);
      _encryptHex = await Flutter3des.encryptToHex(_text, _key, iv: _iv);
      _decryptHex = await Flutter3des.decryptFromHex(_encryptHex, _key, iv: _iv);
      _encryptBase64 = await Flutter3des.encryptToBase64(_text, _key, iv: _iv);
      _decryptBase64 = await Flutter3des.decryptFromBase64(_encryptBase64, _key, iv: _iv);
      setState(() {});
    } catch (e) {
      print(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        appBar: AppBar(
          title: Text('TripleDES (3DES)'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(15.0),
          child: Center(
            child: ListView(
              children: <Widget>[
                _row('KEY', _key),
                _row('IV', _iv),
                _row('String', _string),
                _row('Encrypted in Base64', _encryptBase64),
                _row('Encrypted in Byte Array', _encrypt.toString()),
                _row('Encrypted in Hex', _encryptHex),
              ],
            ),
          ),
        ),
      ),
    );
  }

  _row(String label, String value){
    return ListTile(
      title: Text(label, style: TextStyle(color: Colors.black54, fontSize: 14.0, fontWeight: FontWeight.w600),),
      subtitle: Text(value),
    );
  }
}

使用说明

  1. 加密:通过Flutter3des.encrypt方法对给定的字符串进行加密,返回的是一个字节数组(Uint8List)。
  2. 解密:使用Flutter3des.decrypt方法对加密后的字节数组进行解密,返回原始字符串。
  3. Hex格式加密解密:使用Flutter3des.encryptToHexFlutter3des.decryptFromHex方法可以在Hex格式下进行加密解密操作。
  4. Base64格式加密解密:使用Flutter3des.encryptToBase64Flutter3des.decryptFromBase64方法可以在Base64格式下进行加密解密操作。

希望这个详细的示例能够帮助您更好地理解和使用flutter_3des插件!如果有任何问题或需要进一步的帮助,请随时提问。


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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用flutter_3des插件进行数据加密和解密的示例代码。这个插件提供了对3DES(Triple DES)加密算法的支持。

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

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

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

接下来,你可以在你的Flutter项目中使用这个插件。以下是一个简单的示例,展示如何加密和解密一个字符串:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('3DES Encryption Example'),
        ),
        body: Center(
          child: MyHomePage(),
        ),
      ),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  final String key = '1234567890123456'; // 24字节的密钥(192位)
  String originalText = 'Hello, Flutter!';
  String encryptedText = '';
  String decryptedText = '';

  @override
  void initState() {
    super.initState();
    encryptText();
    decryptText();
  }

  void encryptText() async {
    final tripleDes = TripleDES(key);
    encryptedText = await tripleDes.encrypt(originalText);
    setState(() {});
  }

  void decryptText() async {
    final tripleDes = TripleDES(key);
    decryptedText = await tripleDes.decrypt(encryptedText);
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Original Text: $originalText'),
        SizedBox(height: 20),
        Text('Encrypted Text: $encryptedText'),
        SizedBox(height: 20),
        Text('Decrypted Text: $decryptedText'),
      ],
    );
  }
}

在这个示例中:

  1. 我们定义了一个24字节的密钥(key),这是3DES算法所需的密钥长度(192位)。
  2. originalText是我们要加密的原始文本。
  3. encryptedTextdecryptedText分别用于存储加密和解密后的文本。
  4. initState方法中,我们调用encryptTextdecryptText方法来加密和解密文本。
  5. encryptText方法创建一个TripleDES实例并使用它加密originalText
  6. decryptText方法同样创建一个TripleDES实例并使用它解密encryptedText
  7. 最后,我们在UI中显示原始文本、加密文本和解密文本。

请注意,这个示例代码仅用于演示目的。在实际应用中,你应该妥善处理密钥管理,并确保你的密钥存储和传输方式是安全的。

回到顶部