Flutter加密插件blake2b的使用

Flutter 加密插件 blake2b 的使用

blake2b 是一个 Dart 实现的 BLAKE2b 哈希算法。它参考了 blacknet 和其 源代码

入门指南

案例 1 - 哈希 UTF8 字符串

我们期望得到的结果如下:

  • bip = “mean fury common entire zoo cash fragile dilemma retire appear insect park”
  • hash = “A064E3C0E7D606F7EE717718FD23B943328ACD8CC20DE29B4053FC1C9D3888F6”
  • bytes = -96 100 -29 -64 -25 -42 6 -9 -18 113 119 24 -3 35 -71 67 50 -118 -51 -116 -62 13 -30 -101 64 83 -4 28 -99 56 -120 -10
Int8List expect = Int8List.fromList([-96,100,-29,-64,-25,-42,6,-9,-18,113,119,24,-3,35,-71,67,50,-118,-51,-116,-62,13,-30,-101,64,83,-4,28,-99,56,-120,-10]);
Uint8List uexpect = Utils.int8list2uint8list(expect);

var bip = "mean fury common entire zoo cash fragile dilemma retire appear insect park";
var upperCaseHash = "A064E3C0E7D606F7EE717718FD23B943328ACD8CC20DE29B4053FC1C9D3888F6";

Int8List message = Int8List(bip.length);
for (int i = 0; i < bip.length; i++) {
    message[i] = bip.codeUnitAt(i);
}

// 将 Int8List 转换为 Uint8List
var umessage = Utils.int8list2uint8list(message);

// 哈希操作,从字节数组到字节数组
var bytes = Blake2bHash.hash(umessage, 0, umessage.length);
assert(_uint8ListEqual(bytes, uexpect));

// 哈希操作,从十六进制字符串到十六进制字符串
var lowerCaseHash = Blake2bHash.hashHexString2HexString(HEX.encode(message));
assert(lowerCaseHash == upperCaseHash.toLowerCase());

// 哈希操作,从 UTF8 字符串到十六进制字符串
lowerCaseHash = Blake2bHash.hashUtf8String2HexString(bip);
assert(lowerCaseHash == upperCaseHash.toLowerCase());

案例 2 - 哈希字节数组

我们期望得到的结果如下:

  • hexString = “00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eea2f40ef9c40caffc91d82c3332456039d9562290fe0957bad9ca7bc8e9159900000014d7338a9fc7b42de9c2045635a2bf2ec628f47adec76f8ee6caaa5397025b74e400000000000186a000ae0000000000989680a54407d81a2e4d5c72b8d784a56f88736c64bdf90883c12b6ffff6ec892b2b0c00846d656d6f”
  • hash = “ff773f774a4489c98429d37ba1e8c91ce0ac26af27cd32c1b6ef17843e87eb39”
var hexString = "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eea2f40ef9c40caffc91d82c3332456039d9562290fe0957bad9ca7bc8e9159900000014d7338a9fc7b42de9c2045635a2bf2ec628f47adec76f8ee6caaa5397025b74e400000000000186a000ae0000000000989680a54407d81a2e4d5c72b8d784a56f88736c64bdf90883c12b6ffff6ec892b2b0c00846d656d6f";
var messageBytes = Utils.int8list2uint8list(Int8List.fromList(HEX.decode(hexString)));
var hash = Blake2bHash.hash(messageBytes, 64, messageBytes.length - 64);
var expectedHash = Utils.int8list2uint8list(Int8List.fromList(HEX.decode("ff773f774a4489c98429d37ba1e8c91ce0ac26af27cd32c1b6ef17843e87eb39")));
assert(_uint8ListEqual(hash, expectedHash));

使用说明

  1. 安装插件: 在 pubspec.yaml 文件中添加依赖项:

    dependencies:
      blake2b: ^x.x.x
    
  2. 导入库:

    import 'package:blake2b/blake2b.dart';
    import 'package:convert/convert.dart' as HEX;
    

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

1 回复

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


当然,以下是如何在Flutter项目中使用Blake2b加密插件的示例代码。Blake2b是一种密码哈希函数,通常用于数据完整性验证和密码学应用。Flutter社区已经有了一些封装好的插件来简化这一过程。

首先,你需要在你的pubspec.yaml文件中添加Blake2b插件的依赖。目前,Flutter社区中比较流行的Blake2b实现是blake2b_dart,但请注意,具体使用时请查阅最新的插件文档以确保兼容性。以下是一个假设的依赖项添加示例(请根据实际可用的包名调整):

dependencies:
  flutter:
    sdk: flutter
  blake2b_dart: ^x.y.z  # 请替换为实际的版本号

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

接下来,在你的Dart代码中导入并使用该插件。以下是一个简单的示例,演示如何对字符串数据进行Blake2b哈希处理:

import 'package:flutter/material.dart';
import 'package:blake2b_dart/blake2b_dart.dart'; // 根据实际包名导入

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

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

class Blake2bExample extends StatefulWidget {
  @override
  _Blake2bExampleState createState() => _Blake2bExampleState();
}

class _Blake2bExampleState extends State<Blake2bExample> {
  String? hashResult;

  void _computeHash() async {
    String data = "Hello, Flutter and Blake2b!";
    var blake2b = Blake2b();
    var hashBytes = blake2b.hash(data.codeUnits);
    var hashHex = hashBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join();
    
    setState(() {
      hashResult = hashHex;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        Text('Original Data: Hello, Flutter and Blake2b!'),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: _computeHash,
          child: Text('Compute Blake2b Hash'),
        ),
        SizedBox(height: 20),
        if (hashResult != null)
          Text('Blake2b Hash: $hashResult'),
      ],
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,它包含一个按钮,用于计算并显示给定字符串的Blake2b哈希值。注意,Blake2b()实例化和hash()方法的调用可能根据具体的包实现有所不同,因此请参考你所使用的Blake2b插件的文档。

此外,hashBytes.map((e) => e.toRadixString(16).padLeft(2, '0')).join()这行代码是将哈希字节数组转换为十六进制字符串表示,以便于阅读。

请确保你查阅并遵循你所使用的具体Blake2b插件的文档,因为API和用法可能有所不同。如果blake2b_dart不是最新的或最合适的包,你可以搜索Flutter Pub仓库以找到其他合适的Blake2b实现。

回到顶部