hashlib 1.19.2 hashlib: ^1.19.2 copied to clipboard
Secure hash functions, checksum generators, and key derivation algorithms optimized for Dart.
hashlib #
This library contains implementations of secure hash functions, checksum generators, and key derivation algorithms optimized for Dart.
Depencencies #
There is only 1 dependency used by this package:
Features #
Block Hash Algorithms #
Algorithm | Available methods | Source |
---|---|---|
MD4 | md4 |
RFC-1320 |
MD5 | md5 |
RFC-1321 |
SHA-1 | sha1 |
RFC-3174 |
SHA-2 | sha224 , sha256 , sha384 , sha512 , sha512t224 , sha512t256 |
RFC-6234 |
SHA-3 | sha3_224 , sha3_256 , sha3_384 , sha3_512 |
FIPS-202 |
SHAKE-128 | Shake128 , shake128 , shake128_128 , shake128_256 |
FIPS-202 |
SHAKE-256 | Shake256 , shake256 , shake256_256 , shake256_512 |
FIPS-202 |
Keccak | keccak224 , keccak256 , keccak384 , keccak512 |
Team Keccak |
Blake2b | blake2b160 , blake2b256 , blake2b384 , blake2b512 |
RFC-7693 |
Blake2s | blake2s128 , blake2s160 , blake2s224 , blake2s256 |
RFC-7693 |
xxHash-32 | XXHash32 ,xxh32 ,xxh32code |
Cyan4973 |
xxHash-64 | XXHash64 ,xxh64 ,xxh64code |
Cyan4973 |
xxHash3-64 | XXH3 , xxh3 , xxh3code |
Cyan4973 |
xxHash3-128 | XXH128 , xxh128 , xxh128code |
Cyan4973 |
RIPEMD | ripemd128 , ripemd256 , ripemd160 , ripemd320 |
ISO/IEC 10118-3:2018 |
SM3 | sm3 |
GB/T 32905-2016 |
Password / Key Derivation Algorithms #
Algorithm | Available methods | Source |
---|---|---|
Argon2 | Argon2 , argon2d , argon2i , argon2id , argon2verify |
RFC-9106 |
PBKDF2 | PBKDF2 , pbkdf2 , #.pbkdf2 |
RFC-8081 |
scrypt | Scrypt , scrypt , |
RFC-7914 |
bcrypt | Bcrypt , bcrypt , bcryptSalt , bcryptVerify , bcryptDigest |
Message Authentication Code (MAC) Generators #
Algorithms | Available methods | Source |
---|---|---|
HMAC | HMAC , #.hmac |
RFC-2104 |
Poly1305 | Poly1305 , poly1305 , poly1305pair |
RFC-8439 |
OTP generation for 2FA #
Algorithms | Available methods | Source |
---|---|---|
HOTP | HOTP |
RFC-4226 |
TOTP | TOTP |
RFC-6238 |
Other Hash Algorithms #
Algorithms | Available methods | Source |
---|---|---|
CRC | crc16 , crc32 , crc64 |
Wikipedia |
Alder32 | alder32 |
Wikipedia |
Random Number Generation #
Available generators:
- secure
- system
- keccak
- sha256
- md5
- xxh64
- sm3
Demo #
A demo application is available in Google Play Store featuring the capabilities of this package.
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 'package:hashlib/hashlib.dart';
import 'package:hashlib_codecs/hashlib_codecs.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('');
// Example of hash code generations
print('[XXH32] => ${xxh32code(text)}');
print('[CRC32] => ${crc32code(text)}');
print('[Alder32] => ${alder32code(text)}');
print('[CRC16] => ${crc16code(text)}');
print('');
// Examples of Hash generation
print('[CRC64] => ${crc64sum(text)}');
print('[XXH64] => ${xxh64sum(text)}');
print('[XXH3] => ${xxh3sum(text)}');
print('[XXH128] => ${xxh128sum(text)}');
print('[MD4] => ${md4.string(text)}');
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('[SM3] => ${sm3.string(text)}');
print('');
// Examples of MAC generations
print('HMAC[MD5] => ${md5.hmac(pw).string(text)}');
print('HMAC[SHA1] => ${sha1.hmacBy(key).string(text)}');
print('HMAC[SHA256] => ${sha256.hmacBy(key).string(text)}');
print('HMAC[SHA3-256] => ${HMAC(sha3_256, pw).string(text)}');
print("[BLAKE-2b/224] => ${Blake2bMAC(28, pw).string(text)}");
print("[BLAKE-2b/256] => ${blake2b256.mac(pw).string(text)}");
print('');
// Examples of PBKDF2 key derivation
print("PBKDF2[HMAC[SHA256]] => ${pbkdf2(pw, salt, 100)}");
print("PBKDF2[HMAC[SHA1]] => ${sha1.hmac(pw).pbkdf2(salt, 100)}");
print("PBKDF2[BLAKE2b-256-MAC] => ${blake2b256.mac(pw).pbkdf2(salt, 100)}");
print("PBKDF2[HMAC[BLAKE-2b-256]] => ${blake2b256.pbkdf2(pw, salt, 100)}");
print('');
// Examples of OTP generation
int nw = DateTime.now().millisecondsSinceEpoch ~/ 30000;
var counter = fromHex(nw.toRadixString(16).padLeft(16, '0'));
print('TOTP[time=$nw] => ${TOTP(salt).value()}');
print('HOTP[counter=$nw] => ${HOTP(salt, counter: counter).value()}');
print('');
// Examples of Argon2 key derivation
var argon2Test = Argon2Security.test;
print("[Argon2i] => ${argon2i(pw, salt, security: argon2Test)}");
print("[Argon2d] => ${argon2d(pw, salt, security: argon2Test)}");
print("[Argon2id] => ${argon2id(pw, salt, security: argon2Test)}");
// Examples of scrypt key derivation
var scryptLittle = ScryptSecurity.little;
print("[scrypt] => ${scrypt(pw, salt, security: scryptLittle, dklen: 24)}");
print('');
// Examples of bcrypt key derivation
var bcryptLittle = BcryptSecurity.little;
print("[bcrypt] => ${bcrypt(pw, bcryptSalt(security: bcryptLittle))}");
print('');
}
Benchmarks #
Libraries:
- Hashlib : https://pub.dev/packages/hashlib
- Crypto : https://pub.dev/packages/crypto
- PointyCastle : https://pub.dev/packages/pointycastle
- Hash : https://pub.dev/packages/hash
With 5MB message (10 iterations):
Algorithms | hashlib |
PointyCastle |
crypto |
hash |
---|---|---|---|---|
MD4 | 2.07 Gbps | 828 Mbps 2.5x slow |
||
MD5 | 1.41 Gbps | 724 Mbps 1.95x slow |
1.13 Gbps 1.25x slow |
627 Mbps 2.26x slow |
HMAC(MD5) | 1.3 Gbps | 1.12 Gbps 1.16x slow |
625 Mbps 2.08x slow |
|
SHA-1 | 1.21 Gbps | 456 Mbps 2.65x slow |
849 Mbps 1.42x slow |
362 Mbps 3.34x slow |
HMAC(SHA-1) | 1.21 Gbps | 844 Mbps 1.43x slow |
||
SHA-224 | 810 Mbps | 176 Mbps 4.6x slow |
723 Mbps 1.12x slow |
170 Mbps 4.76x slow |
SHA-256 | 809 Mbps | 179 Mbps 4.52x slow |
724 Mbps 1.12x slow |
170 Mbps 4.77x slow |
HMAC(SHA-256) | 813 Mbps | 708 Mbps 1.15x slow |
||
SHA-384 | 1.27 Gbps | 44.66 Mbps 28.36x slow |
445 Mbps 2.85x slow |
150 Mbps 8.43x slow |
SHA-512 | 1.26 Gbps | 45.17 Mbps 27.94x slow |
445 Mbps 2.84x slow |
151 Mbps 8.38x slow |
SHA3-256 | 812 Mbps | 26.32 Mbps 30.86x slow |
||
SHA3-512 | 1.27 Gbps | 13.91 Mbps 91.63x slow |
||
RIPEMD-128 | 1.77 Gbps | 368 Mbps 4.8x slow |
||
RIPEMD-160 | 551 Mbps | 234 Mbps 2.35x slow |
276 Mbps 2x slow |
|
RIPEMD-256 | 1.9 Gbps | 370 Mbps 5.14x slow |
||
RIPEMD-320 | 552 Mbps | 231 Mbps 2.39x slow |
||
BLAKE-2s | 1.2 Gbps | |||
BLAKE-2b | 1.37 Gbps | 105 Mbps 13.06x slow |
||
Poly1305 | 3.83 Gbps | 1.26 Gbps 3.03x slow |
||
XXH32 | 4.48 Gbps | |||
XXH64 | 4.42 Gbps | |||
XXH3 | 1.02 Gbps | |||
XXH128 | 1.02 Gbps | |||
SM3 | 706 Mbps | 188 Mbps 3.76x slow |
With 1KB message (5000 iterations):
Algorithms | hashlib |
PointyCastle |
crypto |
hash |
---|---|---|---|---|
MD4 | 1.95 Gbps | 794 Mbps 2.45x slow |
||
MD5 | 1.35 Gbps | 691 Mbps 1.95x slow |
1.04 Gbps 1.29x slow |
835 Mbps 1.62x slow |
HMAC(MD5) | 1.07 Gbps | 882 Mbps 1.21x slow |
624 Mbps 1.71x slow |
|
SHA-1 | 1.13 Gbps | 429 Mbps 2.62x slow |
790 Mbps 1.43x slow |
407 Mbps 2.76x slow |
HMAC(SHA-1) | 830 Mbps | 570 Mbps 1.46x slow |
||
SHA-224 | 751 Mbps | 169 Mbps 4.45x slow |
672 Mbps 1.12x slow |
173 Mbps 4.35x slow |
SHA-256 | 749 Mbps | 169 Mbps 4.43x slow |
674 Mbps 1.11x slow |
173 Mbps 4.34x slow |
HMAC(SHA-256) | 541 Mbps | 486 Mbps 1.11x slow |
||
SHA-384 | 1.11 Gbps | 41.31 Mbps 26.78x slow |
394 Mbps 2.81x slow |
168 Mbps 6.59x slow |
SHA-512 | 1.11 Gbps | 40.96 Mbps 27.07x slow |
394 Mbps 2.82x slow |
168 Mbps 6.61x slow |
SHA3-256 | 752 Mbps | 24.86 Mbps 30.26x slow |
||
SHA3-512 | 1.11 Gbps | 13.32 Mbps 83.25x slow |
||
RIPEMD-128 | 1.64 Gbps | 350 Mbps 4.68x slow |
||
RIPEMD-160 | 516 Mbps | 220 Mbps 2.34x slow |
297 Mbps 1.74x slow |
|
RIPEMD-256 | 1.75 Gbps | 350 Mbps 5x slow |
||
RIPEMD-320 | 518 Mbps | 218 Mbps 2.37x slow |
||
BLAKE-2s | 1.18 Gbps | |||
BLAKE-2b | 1.33 Gbps | 103 Mbps 12.9x slow |
||
Poly1305 | 3.57 Gbps | 1.26 Gbps 2.84x slow |
||
XXH32 | 4.23 Gbps | |||
XXH64 | 4.19 Gbps | |||
XXH3 | 956 Mbps | |||
XXH128 | 949 Mbps | |||
SM3 | 659 Mbps | 176 Mbps 3.73x slow |
With 10B message (100000 iterations):
Algorithms | hashlib |
PointyCastle |
crypto |
hash |
---|---|---|---|---|
MD4 | 273 Mbps | 135 Mbps 2.02x slow |
||
MD5 | 246 Mbps | 118 Mbps 2.08x slow |
125 Mbps 1.97x slow |
69.2 Mbps 3.55x slow |
HMAC(MD5) | 44.45 Mbps | 38.39 Mbps 1.16x slow |
18.19 Mbps 2.44x slow |
|
SHA-1 | 144 Mbps | 66.9 Mbps 2.15x slow |
98.88 Mbps 1.45x slow |
43.49 Mbps 3.31x slow |
HMAC(SHA-1) | 22.92 Mbps | 17.47 Mbps 1.31x slow |
||
SHA-224 | 103 Mbps | 27.22 Mbps 3.8x slow |
80.2 Mbps 1.29x slow |
22.93 Mbps 4.51x slow |
SHA-256 | 103 Mbps | 27.14 Mbps 3.79x slow |
80.67 Mbps 1.27x slow |
23.12 Mbps 4.45x slow |
HMAC(SHA-256) | 15.92 Mbps | 14.53 Mbps 1.1x slow |
||
SHA-384 | 80.46 Mbps | 3.5 Mbps 23.01x slow |
30.22 Mbps 2.66x slow |
12.08 Mbps 6.66x slow |
SHA-512 | 80.02 Mbps | 3.48 Mbps 22.98x slow |
29.82 Mbps 2.68x slow |
12.12 Mbps 6.6x slow |
SHA3-256 | 103 Mbps | 1.88 Mbps 54.75x slow |
||
SHA3-512 | 80.01 Mbps | 1.88 Mbps 42.63x slow |
||
RIPEMD-128 | 234 Mbps | 58.97 Mbps 3.96x slow |
||
RIPEMD-160 | 80.04 Mbps | 35.41 Mbps 2.26x slow |
36.04 Mbps 2.22x slow |
|
RIPEMD-256 | 243 Mbps | 57.34 Mbps 4.23x slow |
||
RIPEMD-320 | 79.08 Mbps | 33.59 Mbps 2.35x slow |
||
BLAKE-2s | 159 Mbps | |||
BLAKE-2b | 125 Mbps | 7.61 Mbps 16.38x slow |
||
Poly1305 | 508 Mbps | 318 Mbps 1.6x slow |
||
XXH32 | 837 Mbps | |||
XXH64 | 643 Mbps | |||
XXH3 | 87.49 Mbps | |||
XXH128 | 83.2 Mbps | |||
SM3 | 98.76 Mbps | 28.65 Mbps 3.45x slow |
Key derivator algorithm benchmarks on different security parameters:
Algorithms | test | little | moderate | good | strong |
---|---|---|---|---|---|
scrypt | 0.056 ms | 1.564 ms | 11.017 ms | 92.747 ms | 1375.198 ms |
bcrypt | 0.184 ms | 2.165 ms | 16.617 ms | 262.765 ms | 2101.005 ms |
argon2i | 0.333 ms | 3.034 ms | 16.871 ms | 205.397 ms | 2602.407 ms |
argon2d | 0.289 ms | 2.351 ms | 16.702 ms | 207.512 ms | 2650.916 ms |
argon2id | 0.284 ms | 2.354 ms | 16.642 ms | 209.787 ms | 2574.973 ms |
All benchmarks are done on AMD Ryzen 7 5800X processor and 3200MHz RAM using compiled exe
Dart SDK version: 3.3.3 (stable) (Tue Mar 26 14:21:33 2024 +0000) on "windows_x64"