hashlib 1.7.0 copy "hashlib: ^1.7.0" to clipboard
hashlib: ^1.7.0 copied to clipboard

Secure hash functions, checksum generators, and key derivation algorithms optimized for Dart.

hashlib #

plugin version dependencies dart support likes pub points popularity test

This library contains implementations of secure hash functions, checksum generators, and key derivation algorithms optimized for Dart.

Features #

Secure Hash Functions #

Algorithm Available implementations Source
MD5 md5 RFC-1321
SHA-1 sha1 RFC-3174
SHA-2 sha224, sha256, sha384, sha512, sha512t224, sha512t256 RCC-6234
SHA-3 sha3_224, sha3_256, sha3_384, sha3_512 FIPS-202
SHAKE Shake128, Shake256, shake128, shake256 FIPS-202
Keccak keccak224, keccak256, keccak384, keccak512 Team Keccak
Blake2b blake2b160, blake2b256, blake2b384, blake2b512 RFC-7693
Blake2s blake2s128, blake2s160, blake2s224, blake2s256 RFC-7693

Message Authentication Code (MAC) generators #

Algorithms Available implementations Source
HMAC HMAC RFC-2104

Password Hashing / Key Derivation #

Algorithm Available implementations Source
Argon2 Argon2, argon2d, argon2i, argon2id RFC-9106
PBKDF2 PBKDF2 RFC-9106

Checksum Algorithms #

Algorithms Available Methods Source
Alder32 alder32 Wikipedia
CRC crc16,crc32,crc64 Wikipedia

Getting Started #

The following import will give you access to all of the algorithms in this package.

import 'package:hashlib/hashlib.dart' as hashlib;

Check the API Reference for details.

Usage #

Examples can be found inside the example folder.

import 'dart:convert';

import 'package:hashlib/hashlib.dart';
import 'package:hashlib/src/core/utils.dart';

void main() {
  var text = "Happy Hashing!";
  var key = "password";
  var pw = key.codeUnits;
  var salt = "some salt".codeUnits;
  print("text => $text");
  print("key => $key");
  print("salt => ${toHex(salt)}");
  print('');

  // Examples of Hash generation
  print('[MD5] => ${md5.string(text)}');
  print('[SHA-1] => ${sha1.string(text)}');
  print('[SHA-224] => ${sha224.string(text)}');
  print('[SHA-256] => ${sha256.string(text)}');
  print('[SHA-384] => ${sha384.string(text)}');
  print('[SHA-512] => ${sha512.string(text)}');
  print('[SHA-512/224] => ${sha512t224.string(text)}');
  print('[SHA-512/256] => ${sha512t256.string(text)}');
  print('[SHA3-224] => ${sha3_224.string(text)}');
  print('[SHA3-256] => ${sha3_256.string(text)}');
  print('[SHA3-384] => ${sha3_384.string(text)}');
  print('[SHA3-512] => ${sha3_512.string(text)}');
  print('[Keccak-224] => ${keccak224.string(text)}');
  print('[Keccak-256] => ${keccak256.string(text)}');
  print('[Keccak-384] => ${keccak384.string(text)}');
  print('[Keccak-512] => ${keccak512.string(text)}');
  print('[SHAKE-128] => ${shake128.of(20).string(text)}');
  print('[SHAKE-256] => ${shake256.of(20).string(text)}');
  print('[BLAKE-2s/256] => ${blake2s256.string(text)}');
  print('[BLAKE-2b/512] => ${blake2b512.string(text)}');
  print('');

  // Examples of MAC generations
  print('HMAC[MD5] => ${md5.hmac(pw).string(text)}');
  print('HMAC[MD5] => ${md5.hmacBy(key, utf8).string(text)}');
  print('HMAC[MD5] => ${md5.hmacBy(key).string(text)}');
  print('HMAC[MD5] => ${HMAC(md5, pw).string(text)}');
  print("[BLAKE-2b/256] => ${blake2b256.mac(pw).string(text)}");
  print("[BLAKE-2b/256] => ${Blake2bMAC(256, pw).string(text)}");
  print('');

  // Examples of PBKDF2 key derivation
  print("PBKDF2[HMAC[SHA-256]] => ${sha256.pbkdf2(pw, salt, 100)}");
  print("PBKDF2[HMAC[SHA-256]] => ${sha256.hmac(pw).pbkdf2(salt, 100)}");
  print("PBKDF2[BLAKE-2b-MAC] => ${blake2b256.mac(pw).pbkdf2(salt, 100)}");
  print("PBKDF2[HMAC[BLAKE-2b]] => ${blake2b256.pbkdf2(pw, salt, 100)}");
  print("PBKDF2[HMAC[BLAKE-2b]] => ${blake2b256.hmac(pw).pbkdf2(salt, 100)}");
  print('');

  // Examples of Argon2 key derivation
  var security = Argon2Security.test;
  print("[Argon2i] => ${argon2i(pw, salt, security: security)}");
  print("[Argon2d] => ${argon2d(pw, salt, security: security)}");
  print("[Argon2id] => ${argon2id(pw, salt, security: security)}");
  print('');

  // Example of checksum code generators
  print('[CRC16] => ${crc16code(text)}');
  print('[CRC32] => ${crc32code(text)}');
  print('[CRC64] => ${crc64code(text)}');
  print('[Alder32] => ${alder32code(text)}');
}

Benchmarks #

To obtain the following benchmarks, run this command:

dart compile exe ./benchmark/benchmark.dart && ./benchmark/benchmark.exe

Libraries:

With string of length 10 (100000 iterations):

Algorithms hashlib crypto hash PointyCastle sha3
MD5 35.353 ms 99.184 ms
181% slower
132.232 ms
274% slower
84.348 ms
139% slower
SHA-1 60.984 ms 115.06 ms
89% slower
204.618 ms
236% slower
132.707 ms
118% slower
SHA-224 82.921 ms 137.013 ms
65% slower
376.467 ms
354% slower
317.903 ms
283% slower
SHA-256 82.724 ms 135.03 ms
63% slower
375.416 ms
354% slower
318.855 ms
285% slower
SHA-384 103.835 ms 344.046 ms
231% slower
722.537 ms
596% slower
2601.015 ms
2405% slower
SHA-512 103.755 ms 346.637 ms
234% slower
713.643 ms
588% slower
2627.374 ms
2432% slower
SHA-512/224 102.017 ms 342.321 ms
236% slower
5106.248 ms
4905% slower
SHA-512/256 102.386 ms 341.22 ms
233% slower
5096.226 ms
4877% slower
SHA3-256 82.077 ms 4472.259 ms
5349% slower
408.232 ms
397% slower
SHA3-512 103.6 ms 4481.2 ms
4225% slower
408.795 ms
295% slower
BLAKE-2s 62.667 ms
BLAKE-2b 81.948 ms 1144.464 ms
1297% slower
HMAC(MD5) 213.07 ms 266.102 ms
25% slower
498.219 ms
134% slower
HMAC(SHA-256) 535.764 ms 624.437 ms
17% slower

With string of length 1000 (5000 iterations):

Algorithms hashlib crypto hash PointyCastle sha3
MD5 31.268 ms 41.928 ms
34% slower
52.334 ms
67% slower
60.301 ms
93% slower
SHA-1 36.819 ms 53.565 ms
45% slower
105.095 ms
185% slower
89.969 ms
144% slower
SHA-224 52.821 ms 63.124 ms
20% slower
238.791 ms
352% slower
237.553 ms
350% slower
SHA-256 52.85 ms 62.812 ms
19% slower
238.127 ms
351% slower
236.949 ms
348% slower
SHA-384 34.541 ms 107.518 ms
211% slower
257.815 ms
646% slower
1000.244 ms
2796% slower
SHA-512 33.865 ms 107.616 ms
218% slower
233.219 ms
589% slower
999.335 ms
2851% slower
SHA-512/224 33.684 ms 109.742 ms
226% slower
1123.899 ms
3237% slower
SHA-512/256 34.84 ms 109.424 ms
214% slower
1143.562 ms
3182% slower
SHA3-256 54.081 ms 1721.936 ms
3084% slower
230.092 ms
325% slower
SHA3-512 34.698 ms 3002.732 ms
8554% slower
337.325 ms
872% slower
BLAKE-2s 36.763 ms
BLAKE-2b 25.799 ms 409.533 ms
1487% slower
HMAC(MD5) 40.644 ms 53.016 ms
30% slower
70.384 ms
73% slower
HMAC(SHA-256) 74.654 ms 91.42 ms
22% slower

With string of length 500000 (10 iterations):

Algorithms hashlib crypto hash PointyCastle sha3
MD5 30.376 ms 40.509 ms
33% slower
69.67 ms
129% slower
57.96 ms
91% slower
SHA-1 33.523 ms 51.793 ms
54% slower
120.908 ms
261% slower
86.113 ms
157% slower
SHA-224 50.253 ms 60.678 ms
21% slower
249.619 ms
397% slower
230.563 ms
359% slower
SHA-256 50.344 ms 60.738 ms
21% slower
249.453 ms
395% slower
229.371 ms
356% slower
SHA-384 31.777 ms 103.155 ms
225% slower
280.01 ms
781% slower
968.057 ms
2946% slower
SHA-512 31.718 ms 103.332 ms
226% slower
279.144 ms
780% slower
969.389 ms
2956% slower
SHA-512/224 31.656 ms 102.954 ms
225% slower
970.759 ms
2967% slower
SHA-512/256 32.011 ms 103.348 ms
223% slower
968.022 ms
2924% slower
SHA3-256 50.22 ms 1560.669 ms
3008% slower
212.792 ms
324% slower
SHA3-512 31.7 ms 2932.904 ms
9152% slower
334.856 ms
956% slower
BLAKE-2s 34.788 ms
BLAKE-2b 23.761 ms 393.928 ms
1558% slower
HMAC(MD5) 31.094 ms 42.317 ms
36% slower
69.942 ms
125% slower
HMAC(SHA-256) 50.258 ms 62.296 ms
24% slower

Argon2 benchmarks on different security parameters:

Algorithms test little moderate good strong
argon2i 0.391 ms 2.889 ms 19.686 ms 250.008 ms 2718.1 ms
argon2d 0.29 ms 3.207 ms 19.368 ms 245.818 ms 2664.177 ms
argon2id 0.382 ms 5.554 ms 20.352 ms 250.707 ms 2683.672 ms

These benchmarks were done in AMD Ryzen 7 5800X processor and 3200MHz RAM using compiled exe on Windows 10

31
likes
0
pub points
89%
popularity

Publisher

verified publisherbitanon.dev

Secure hash functions, checksum generators, and key derivation algorithms optimized for Dart.

Repository (GitHub)
View/report issues

License

unknown (LICENSE)

More

Packages that depend on hashlib