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));
使用说明
-
安装插件: 在
pubspec.yaml
文件中添加依赖项:dependencies: blake2b: ^x.x.x
-
导入库:
import 'package:blake2b/blake2b.dart'; import 'package:convert/convert.dart' as HEX;
更多关于Flutter加密插件blake2b的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于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实现。