Flutter哈希计算插件hashlib_codecs的使用

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

Flutter哈希计算插件hashlib_codecs的使用

简介

hashlib_codecs 是一个纯 Dart 实现的快速且容错的编解码库。它提供了多种编码和解码方法,包括二进制、八进制、十六进制、Base32、Base64 和其他一些常用的编码方式。

特性

  • 无依赖:该包没有任何外部依赖。
  • 多种编码方式
    • 二进制(Base-2)
    • 八进制(Base-8)
    • 十六进制(Base-16)
    • Base-32
    • Base-64
    • UTF-8
    • BigInt
    • Modular Crypt Format (PHC String Format)

安装

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

dependencies:
  hashlib_codecs: ^latest_version

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

使用示例

以下是一个完整的示例代码,展示了如何使用 hashlib_codecs 进行各种编码和解码操作:

import 'package:hashlib_codecs/hashlib_codecs.dart';

void main() {
  var inp = [0x3, 0xF1];
  print("input => $inp");
  print('');

  // 二进制编码
  print("binary => ${toBinary(inp)}");
  print('');

  // 八进制编码
  print("octal => ${toOctal(inp)}");
  print('');

  // 十六进制编码
  print("hexadecimal => ${toHex(inp)}");
  print("hexadecimal (uppercase) => ${toHex(inp, upper: true)}");
  print('');

  // Base32 编码
  print("base32 => ${toBase32(inp)}");
  print("base32 (lowercase) => ${toBase32(inp, lower: true)}");
  print("base32 (no padding) => ${toBase32(inp, padding: false)}");
  print("base32 (hex) => ${toBase32(inp, codec: Base32Codec.hex)}");
  print("base32 (z-base-32) => ${toBase32(inp, codec: Base32Codec.z)}");
  print("base32 (geohash) => ${toBase32(inp, codec: Base32Codec.geohash)}");
  print("base32 (crockford) => ${toBase32(inp, codec: Base32Codec.crockford)}");
  print("base32 (word-safe) => ${toBase32(inp, codec: Base32Codec.wordSafe)}");
  print('');

  // Base64 编码
  print("base64 => ${toBase64(inp)}");
  print("base64url => ${toBase64(inp, url: true)}");
  print("base64 (no padding) => ${toBase64(inp, padding: false)}");
  print("bcrypt => ${toBase64(inp, codec: Base64Codec.bcrypt)}");
  print('');
}

详细说明

二进制(Base-2)

  • 类:Base2Codec
  • 方法:fromBinary, toBinary
  • 可用编码:01(默认)

八进制(Base-8)

  • 类:Base8Codec
  • 方法:fromOctal, toOctal
  • 可用编码:012345678(默认)

十六进制(Base-16)

  • 类:Base16Codec
  • 方法:fromHex, toHex
  • 可用编码:
    • upper: 0123456789ABCDEF(默认)
    • lower: 0123456789abcdef

Base-32

  • 类:Base32Codec
  • 方法:fromBase32, toBase32
  • 可用编码:
    • standard (RFC-4648): ABCDEFGHIJKLMNOPQRSTUVWXYZ234567(默认)
    • lowercase: abcdefghijklmnopqrstuvwxyz234567
    • hex: 0123456789ABCDEFGHIJKLMNOPQRSTUV
    • hexLower: 0123456789abcdefghijklmnopqrstuv
    • crockford: 0123456789bcdefghjkmnpqrstuvwxyz
    • z: ybndrfg8ejkmcpqxot1uwisza345h769
    • wordSafe: 23456789CFGHJMPQRVWXcfghjmpqrvwx

Base-64

  • 类:Base64Codec
  • 方法:fromBase64, toBase64
  • 可用编码:
    • standard (RFC-4648): ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/(默认)
    • urlSafe: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_
    • bcrypt: ./ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

UTF-8

  • 类:UTF8Codec
  • 方法:fromUtf8, toUtf8
  • 可用编码:RFC-3629(默认)

BigInt

  • 类:BigIntCodec
  • 方法:fromBigInt, toBigInt
  • 可用编码:
    • msbFirst: 大端字节序
    • lsbFirst: 小端字节序

Modular Crypt Format (PHC String Format)

  • 类:CryptFormat
  • 常量:crypt
  • 方法:toCrypt, fromCrypt

API 参考

更多详细信息可以参考 API 文档

希望这些信息对你有所帮助!如果你有任何问题或需要进一步的帮助,请随时提问。


更多关于Flutter哈希计算插件hashlib_codecs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter哈希计算插件hashlib_codecs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中使用hashlib_codecs插件进行哈希计算的代码案例。这个插件提供了多种哈希算法,如MD5、SHA-1、SHA-256等。

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

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

然后运行flutter pub get来获取依赖。

接下来,你可以在你的Flutter应用中使用这个插件进行哈希计算。以下是一个完整的示例,展示如何使用MD5和SHA-256算法来计算字符串的哈希值:

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

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

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

class HashDemo extends StatefulWidget {
  @override
  _HashDemoState createState() => _HashDemoState();
}

class _HashDemoState extends State<HashDemo> {
  String md5Hash = '';
  String sha256Hash = '';

  void calculateHashes(String input) {
    // 计算MD5哈希值
    var md5 = Hash.md5();
    var md5Result = md5.convert(utf8.encode(input)).toString();
    setState(() {
      md5Hash = md5Result;
    });

    // 计算SHA-256哈希值
    var sha256 = Hash.sha256();
    var sha256Result = sha256.convert(utf8.encode(input)).toString();
    setState(() {
      sha256Hash = sha256Result;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Hashlib Codecs Demo'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(
                labelText: 'Enter text to hash',
              ),
              onChanged: (value) {
                // 当文本框内容改变时计算哈希值
                calculateHashes(value);
              },
            ),
            SizedBox(height: 20),
            Text('MD5 Hash: $md5Hash'),
            SizedBox(height: 10),
            Text('SHA-256 Hash: $sha256Hash'),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它包含一个文本输入框和两个文本标签,分别显示输入的MD5和SHA-256哈希值。当用户输入文本时,onChanged回调会被触发,从而调用calculateHashes方法来计算哈希值并更新UI。

请注意,hashlib_codecs插件内部使用了dart:convert库中的utf8.encode方法将字符串转换为字节序列,然后再进行哈希计算。这是因为哈希算法需要字节序列作为输入。

这个示例展示了如何使用hashlib_codecs插件在Flutter应用中进行哈希计算。你可以根据需要扩展这个示例,以支持更多的哈希算法或添加更多的功能。

回到顶部