Planning to checksum in PHP?

I am rewriting NINJA to use the block scanning part of the rsync algorithm for binary differences, so I needed to figure out which checksum would be fastest to achieve in PHP. rsync normally calls for Adler-32, but any checksum algorithm should work fine.

Below are the results of several checksum/hash algorithms in PHP. Clearly, PHP’s native crc32() function is the fastest of the group:


This is a test to calculate which checksum/hashing algorithm is fastest.

Testing with a 0x100 size block:
crc16() : Completed in 0.00100493431091s
: 8d4d
crc32() : Completed in 0.00001001358032s
: 7c1e625b
adler32(): Completed in 0.00113701820374s
: 490d172b
md5() : Completed in 0.00002098083496s
: 0fe9cb3c5543066446bf35256be6d075
sha1() : Completed in 0.00003004074096s
: 8a757300390b89df6f0f57f69d5b90b064dd4544

Testing with a 0x200 size block:
crc16() : Completed in 0.00193786621094s
: 72e5
crc32() : Completed in 0.00000905990600s
: e37842fa
adler32(): Completed in 0.00049519538879s
: 25c52566
md5() : Completed in 0.00001502037048s
: d78e366baf1b9cac702b25fcc8f29bf9
sha1() : Completed in 0.00001811981201s
: 67dde897fc9cc0fcb2408f620b933a038060cfe0

Testing with a 0x400 size block:
crc16() : Completed in 0.00572681427002us
: ea94
crc32() : Completed in 0.00001215934753s
: d90ebae3
adler32(): Completed in 0.00187897682190s
: dd9549f1
md5() : Completed in 0.00001978874206s
: c39ea5f986407208be72f6583bd33cc5
sha1() : Completed in 0.00002598762512s
: fb35563f478ac896136323c44354d0bae7ce8f84

Testing with a 0x800 size block:
crc16() : Completed in 0.00884294509888s
: f1be
crc32() : Completed in 0.00001597404479s
: 991e35aa
adler32(): Completed in 0.00279593467712s
: 1b8aa5d0
md5() : Completed in 0.00002598762512s
: 565d6a496a9eaae0d20b82167077cd20
sha1() : Completed in 0.00006914138793s
: 3a182383312c801a54d101b29382ebdb2fa15f3c

Testing with a 0x1000 size block:
crc16() : Completed in 0.01928710937500s
: 3f4b
crc32() : Completed in 0.00002408027648s
: a68c1fb3
adler32(): Completed in 0.00396609306335s
: e3483428
md5() : Completed in 0.00003981590271s
: 6b3343ca4a23b9b536cd9bd15aed55ea
sha1() : Completed in 0.00098609924316s
: 3ce01647efb6454f75df17db5903f4e3caab8802

Testing with a 0x2000 size block:
crc16() : Completed in 0.03786110877990s
: cc79
crc32() : Completed in 0.00004100799560s
: 7d1cf85
adler32(): Completed in 0.00977802276611s
: e7c44c66
md5() : Completed in 0.00006699562072s
: eabca26813c7bdcae89a369e855dfd2c
sha1() : Completed in 0.00009417533874s
: 191d4a5803981f499440a144c60247ca18069962

Testing with a 0x4000 size block:
crc16() : Completed in 0.08212399482730s
: 57b6
crc32() : Completed in 0.00007605552673s
: 11dfafc9
adler32(): Completed in 0.01928615570070s
: f9db9b2e
md5() : Completed in 0.00012612342834s
: 7ebbe8b9c97854f4c17c5671aaedd2db
sha1() : Completed in 0.00017595291137s
: b482c1279333ac896a0bc9f0ba04719d8d4aad04

Testing with a 0x8000 size block:
crc16() : Completed in 0.15789103508000s
: 2e40
crc32() : Completed in 0.00014996528625s
: b383f65c
adler32(): Completed in 0.03803014755250s
: bdb63537
md5() : Completed in 0.00022792816162s
: d29cce15e12b0753b7f015ee004e54c8
sha1() : Completed in 0.00033116340637s
: 67f323e6f111004f8323298928171d8bda9bee49

Testing with a 0x10000 size block:
crc16() : Completed in 0.31415820121800s
: 6f91
crc32() : Completed in 0.00027489662170s
: f50d27d7
adler32(): Completed in 0.07920503616330s
: a8391752
md5() : Completed in 0.00044894218444s
: 131cb4ff2f30b5a3d311fa3ae1fcae6a
sha1() : Completed in 0.00065088272094s
: 011d57064caea04506ecae2fcdbb8c29c4a5ddb6

Related Posts

Related posts brought to you by Yet Another Related Posts Plugin.


About this entry