Flutter加密解密插件cipherlib的使用

以下是关于Flutter加密解密插件cipherlib使用的详细说明,包括完整的示例代码。

cipherlib

插件版本 测试状态 代码覆盖率 喜欢数 积分 受欢迎程度 Dart支持

实现Dart语言中的加密和解密算法。

依赖项

此包仅使用一个依赖项:

特性

加密算法 公共类和方法
AES AES, NIST.FIPS.197
XOR XOR, xor, xorStream Wikipedia
ChaCha20 ChaCha20, chacha20, chacha20Stream RFC-8439
ChaCha20/Poly1305 ChaCha20Poly1305, chacha20poly1305 RFC-8439
XChaCha20 XChaCha20, xchacha20, xchacha20Stream libsodium
XChaCha20/Poly1305 XChaCha20Poly1305, xchacha20poly1305 libsodium
Salsa20 Salsa20, salsa20, salsa20Stream Snuffle-2005
Salsa20/Poly1305 Salsa20Poly1305, salsa20poly1305 Snuffle-2005
XSalsa20 XSalsa20, xsalsa20, xsalsa20Stream libsodium
XSalsa20/Poly1305 XSalsa20Poly1305, xsalsa20poly1305 libsodium

可用模式

  • ECB: 电子码块
  • CBC: 密码块链接
  • CTR: 计数器
  • GCM: Galois/计数器模式
  • CFB: 密码反馈
  • OFB: 输出反馈
  • IGE: 无限乱码扩展
  • PCBC: 传播密码块链接
  • XTS: XEX(XOR-Encrypt-XOR)可调整块密码与密文窃取

开始使用

以下导入语句将使你能够访问此包中的所有算法:

import 'package:cipherlib/cipherlib.dart';

详情请查看API参考文档

使用示例

示例可以在example文件夹中找到。

import 'package:cipherlib/cipherlib.dart';
import 'package:hashlib/hashlib.dart';
import 'package:hashlib/codecs.dart';

void main() {
  print('----- AES -----');
  {
    var plain = 'A not very secret message';
    var key = randomBytes(32);
    var iv = randomBytes(16);
    print('  Text: $plain');
    print('   Key: ${toHex(key)}');
    print(' Nonce: ${toHex(iv)}');
    // 不同的模式
    print('  ECB: ${toHex(AES(key).ecb().encryptString(plain))}');
    print('  CBC: ${toHex(AES(key).cbc(iv).encryptString(plain))}');
    print('  CTR: ${toHex(AES(key).ctr(iv).encryptString(plain))}');
    print('  GCM: ${toHex(AES(key).gcm(iv).encryptString(plain))}');
    print('  CFB: ${toHex(AES(key).cfb(iv).encryptString(plain))}');
    print('  OFB: ${toHex(AES(key).ofb(iv).encryptString(plain))}');
    print('  XTS: ${toHex(AES(key).xts(iv).encryptString(plain))}');
    print('  IGE: ${toHex(AES(key).ige(iv).encryptString(plain))}');
    print(' PCBC: ${toHex(AES(key).pcbc(iv).encryptString(plain))}');
  }
  print('');

  print('----- XChaCha20 -----');
  {
    var text = "Hide me!";
    var key = randomBytes(32);
    var nonce = randomBytes(24);
    // 加密和签名
    var cipher = xchacha20poly1305(
      toUtf8(text),
      key,
      nonce: nonce,
    );
    // 验证并解密
    var plain = xchacha20poly1305(
      cipher.data,
      key,
      nonce: nonce,
      mac: cipher.tag.bytes,
    );
    print('  Text: $text');
    print('   Key: ${toHex(key)}');
    print(' Nonce: ${toHex(nonce)}');
    print('Cipher: ${toHex(cipher.data)}');
    print('   Tag: ${cipher.tag.hex()}');
    print(' Plain: ${fromUtf8(plain.data)}');
  }
  print('');
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用cipherlib插件进行加密和解密的示例代码。cipherlib是一个用于加密和解密的Flutter插件,支持多种加密算法。为了演示,我们将使用AES对称加密算法。

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

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

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

接下来,我们编写一个示例代码来展示如何使用cipherlib进行AES加密和解密。

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

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

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

class _MyAppState extends State<MyApp> {
  String plainText = "Hello, Flutter!";
  String encryptedText = "";
  String decryptedText = "";

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

  void _encryptText() async {
    // 密钥和初始化向量(IV),AES要求密钥长度为16, 24, 或 32字节,IV长度为16字节
    final key = Uint8List.fromList('0123456789abcdef'.codeUnits); // 16字节
    final iv = Uint8List.fromList('abcdef0123456789'.codeUnits.sublist(0, 16)); // 16字节

    // 创建Cipher实例
    final cipher = Cipher();

    // 执行加密
    final encrypted = await cipher.aesEncrypt(plainText, key, iv);
    setState(() {
      encryptedText = encrypted;
      // 解密以验证结果
      _decryptText(key, iv, encrypted);
    });
  }

  void _decryptText(Uint8List key, Uint8List iv, String encrypted) async {
    final cipher = Cipher();
    final decrypted = await cipher.aesDecrypt(encrypted, key, iv);
    setState(() {
      decryptedText = decrypted;
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Cipherlib Demo'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Plain Text: $plainText'),
              SizedBox(height: 16),
              Text('Encrypted Text: $encryptedText'),
              SizedBox(height: 16),
              Text('Decrypted Text: $decryptedText'),
            ],
          ),
        ),
      ),
    );
  }
}

解释

  1. 依赖安装:首先,在pubspec.yaml中添加cipherlib依赖,并运行flutter pub get
  2. 密钥和IV:AES加密需要一个密钥和一个初始化向量(IV)。在这个示例中,我们使用16字节的密钥和IV。
  3. Cipher实例:创建一个Cipher实例。
  4. 加密:使用cipher.aesEncrypt方法进行加密,将明文转换为密文。
  5. 解密:使用cipher.aesDecrypt方法进行解密,将密文转换回明文。
  6. UI展示:在Flutter的UI中展示明文、密文和解密后的明文。

这个示例展示了如何使用cipherlib插件在Flutter应用中进行AES加密和解密。请根据你的需求调整密钥、IV和加密模式。

回到顶部