Created
March 6, 2024 15:33
-
-
Save rickhull/e0df6d9ac714edfe592a2841ef5cc49a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'zlib' | |
require 'digest' | |
require 'openssl' | |
require 'benchmark/ips' | |
DIGESTS = %w[MD5 SHA1 SHA256 SHA384 SHA512 RMD160].map { |name| | |
Digest(name).new | |
} | |
OPENSSL_DIGESTS = %w[SHA1 | |
SHA224 SHA256 SHA384 SHA512 | |
SHA512-224 SHA512-256 | |
SHA3-224 SHA3-256 SHA3-384 SHA3-512 | |
BLAKE2s256 BLAKE2b512].map { |name| | |
OpenSSL::Digest.new(name) | |
} | |
# so much faster, it throws off the comparison | |
INCLUDE_CRC32 = false | |
str = 'All work and no play makes Jack a very dull boy.' | |
Benchmark.ips do |b| | |
b.config(time: 1, warmup: 0.2) | |
if INCLUDE_CRC32 | |
b.report("Zlib.crc32") { | |
Zlib.crc32(str) | |
} | |
end | |
DIGESTS.each { |algo| | |
b.report(algo.class.to_s) { | |
algo.digest(str) | |
} | |
} | |
OPENSSL_DIGESTS.each { |algo| | |
b.report("OpenSSL::Digest(#{algo.name})") { | |
algo.digest(str) | |
} | |
} | |
b.compare! | |
end |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
[rwh@nixos:~/git/compsci]$ ruby test/bench/digest.rb | |
ruby 3.2.2 (2023-03-30 revision e51014f9c0) +YJIT [x86_64-linux] | |
Warming up -------------------------------------- | |
Digest::MD5 211.105k i/100ms | |
Digest::SHA1 181.716k i/100ms | |
Digest::SHA256 136.872k i/100ms | |
Digest::SHA384 112.944k i/100ms | |
Digest::SHA512 111.909k i/100ms | |
Digest::RMD160 161.748k i/100ms | |
OpenSSL::Digest(SHA1) | |
99.778k i/100ms | |
OpenSSL::Digest(SHA224) | |
89.134k i/100ms | |
OpenSSL::Digest(SHA256) | |
88.503k i/100ms | |
OpenSSL::Digest(SHA384) | |
81.529k i/100ms | |
OpenSSL::Digest(SHA512) | |
80.597k i/100ms | |
OpenSSL::Digest(SHA512-224) | |
77.132k i/100ms | |
OpenSSL::Digest(SHA512-256) | |
78.483k i/100ms | |
OpenSSL::Digest(SHA3-224) | |
68.163k i/100ms | |
OpenSSL::Digest(SHA3-256) | |
68.680k i/100ms | |
OpenSSL::Digest(SHA3-384) | |
68.310k i/100ms | |
OpenSSL::Digest(SHA3-512) | |
68.028k i/100ms | |
OpenSSL::Digest(BLAKE2s256) | |
84.671k i/100ms | |
OpenSSL::Digest(BLAKE2b512) | |
82.297k i/100ms | |
Calculating ------------------------------------- | |
Digest::MD5 2.081M (± 1.4%) i/s - 2.111M in 1.014597s | |
Digest::SHA1 1.807M (± 0.3%) i/s - 1.817M in 1.005586s | |
Digest::SHA256 1.357M (± 0.4%) i/s - 1.369M in 1.008647s | |
Digest::SHA384 1.158M (± 0.7%) i/s - 1.242M in 1.072759s | |
Digest::SHA512 1.134M (± 0.4%) i/s - 1.231M in 1.085901s | |
Digest::RMD160 1.624M (± 0.3%) i/s - 1.779M in 1.095586s | |
OpenSSL::Digest(SHA1) | |
1.000M (± 0.4%) i/s - 1.098M in 1.097361s | |
OpenSSL::Digest(SHA224) | |
894.996k (± 0.2%) i/s - 980.474k in 1.095512s | |
OpenSSL::Digest(SHA256) | |
888.774k (± 0.4%) i/s - 973.533k in 1.095385s | |
OpenSSL::Digest(SHA384) | |
813.139k (± 0.6%) i/s - 815.290k in 1.002680s | |
OpenSSL::Digest(SHA512) | |
813.274k (± 0.3%) i/s - 886.567k in 1.090129s | |
OpenSSL::Digest(SHA512-224) | |
773.323k (± 0.3%) i/s - 848.452k in 1.097162s | |
OpenSSL::Digest(SHA512-256) | |
786.250k (± 0.4%) i/s - 863.313k in 1.098034s | |
OpenSSL::Digest(SHA3-224) | |
681.502k (± 0.2%) i/s - 681.630k in 1.000193s | |
OpenSSL::Digest(SHA3-256) | |
683.065k (± 0.3%) i/s - 686.800k in 1.005480s | |
OpenSSL::Digest(SHA3-384) | |
683.624k (± 0.4%) i/s - 751.410k in 1.099171s | |
OpenSSL::Digest(SHA3-512) | |
682.436k (± 0.3%) i/s - 748.308k in 1.096534s | |
OpenSSL::Digest(BLAKE2s256) | |
862.242k (± 0.3%) i/s - 931.381k in 1.080198s | |
OpenSSL::Digest(BLAKE2b512) | |
821.966k (± 0.7%) i/s - 822.970k in 1.001273s | |
Comparison: | |
Digest::MD5: 2081096.6 i/s | |
Digest::SHA1: 1807077.9 i/s - 1.15x slower | |
Digest::RMD160: 1624009.0 i/s - 1.28x slower | |
Digest::SHA256: 1357010.0 i/s - 1.53x slower | |
Digest::SHA384: 1158173.7 i/s - 1.80x slower | |
Digest::SHA512: 1133640.3 i/s - 1.84x slower | |
OpenSSL::Digest(SHA1): 1000191.7 i/s - 2.08x slower | |
OpenSSL::Digest(SHA224): 894996.4 i/s - 2.33x slower | |
OpenSSL::Digest(SHA256): 888774.5 i/s - 2.34x slower | |
OpenSSL::Digest(BLAKE2s256): 862241.9 i/s - 2.41x slower | |
OpenSSL::Digest(BLAKE2b512): 821966.2 i/s - 2.53x slower | |
OpenSSL::Digest(SHA512): 813274.2 i/s - 2.56x slower | |
OpenSSL::Digest(SHA384): 813139.2 i/s - 2.56x slower | |
OpenSSL::Digest(SHA512-256): 786250.2 i/s - 2.65x slower | |
OpenSSL::Digest(SHA512-224): 773323.3 i/s - 2.69x slower | |
OpenSSL::Digest(SHA3-384): 683624.2 i/s - 3.04x slower | |
OpenSSL::Digest(SHA3-256): 683065.0 i/s - 3.05x slower | |
OpenSSL::Digest(SHA3-512): 682436.4 i/s - 3.05x slower | |
OpenSSL::Digest(SHA3-224): 681501.7 i/s - 3.05x slower |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment