# crypto类库

https://github.com/dart-lang/crypto 一个用于Hash的算法实现,包涵常用的:MD5SHA1,SHA256

使用MD5,SHA1,SHA256计算数据hash

import "package:crypto/crypto.dart";
import 'package:crypto/src/digest_sink.dart';
import "dart:convert";
main() {
  var bytes=utf8.encode("计算字符串hash");
  print(md5.convert(bytes));
  print(sha1.convert(bytes));
  print(sha256.convert(bytes));
}
1
2
3
4
5
6
7
8
9
10

使用MD5,SHA1,SHA256计算比较大的数据hash

import 'dart:io';
import "package:crypto/crypto.dart";
import 'package:crypto/src/digest_sink.dart';
main() async {
  var filePath=r"D:\Download\jre-8u201-windows-x64.exe";
  var uri=Uri.file(filePath,windows: true);
  var file=File.fromUri(uri);
  var ds=DigestSink();
  var bytesCs=md5.startChunkedConversion(ds);
  await for (var bytes in file.openRead()){
    bytesCs.add(bytes);
  }
  bytesCs.close();
  print(ds.value);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

参数化hash算法,可选密码参数

import "package:crypto/crypto.dart";
import 'package:crypto/src/digest_sink.dart';
import "dart:convert";
main() {
  var bytes=utf8.encode("计算字符串hash");
  //简单数据的hash
  print(Hmac(md5, []).convert(bytes));
  //hash大数据,分段处理
  //Hmac接受两个参数:
  //第一个决定使用的hash算法
  //第二个设置一个key(密码,如果有必要的话),可以保证你的hash结果别人hash不出来
  var md5Hmac=Hmac(md5, []);
  var ds=DigestSink();
  var bytesCs = md5Hmac.startChunkedConversion(ds);
  bytesCs.add(bytes);
  bytesCs.add(bytes);
  bytesCs.close();
  print(ds.value);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21