在Dart中计算SHA256校验和

jra*_*amb 1 dart

dart中有一个"crypto"库,如下所示:https: //api.dartlang.org/docs/channels/stable/latest/crypto.html

我想计算客户端上给定字符串的SHA256校验和,可能是这样的:

    var sha256 = new SHA256();
    sha256.add('message'.codeUnits);
    var digest = sha256.close();
    var hexString = CryptoUtils.bytesToHex(digest);
    assert(hexString ==
      'ab530a13e45914982b79f9b7e3fba994cfd1f3fb22f71cea1afbf02b460c6d1d');
Run Code Online (Sandbox Code Playgroud)

但是我甚至无法导入该库以使用SHA256对象...这些都不起作用:

    import 'dart:crypto';
    import 'crypto';
Run Code Online (Sandbox Code Playgroud)

我在Dart目录中找不到SHA256(我使用的是Dart 1.0.0 STABLE)

Ale*_*uin 8

加密包必须是用进口:

import 'package:crypto/crypto.dart';
Run Code Online (Sandbox Code Playgroud)

此外,您粘贴的代码段已过时.你应该做 :

import 'package:crypto/crypto.dart';

main() {
  var sha256 = new SHA256();
  sha256.add('message'.codeUnits);
  var digest = sha256.close();
  var hexString = CryptoUtils.bytesToHex(digest);
  print(hexString ==
      'ab530a13e45914982b79f9b7e3fba994cfd1f3fb22f71cea1afbf02b460c6d1d'); //true
}
Run Code Online (Sandbox Code Playgroud)


小智 6

2013年的答案再次过时,因为加密包的 API已经更新和简化:

import 'dart:convert';
import 'package:crypto/crypto.dart';

main() {
    List<int> bytes = UTF8.encode('message');
    String hash = sha256.convert(bytes).toString();
    assert(hash == 'ab530a13e45914982b79f9b7e3fba994cfd1f3fb22f71cea1afbf02b460c6d1d');  // true
    print(hash);
}
Run Code Online (Sandbox Code Playgroud)