So, based on the comments, I created a simple test to check how many different hashing methods are.
function bcrypt_salt($cost) { return "$2y$" . $cost . "$" . str_replace('+', '.', base64_encode(openssl_random_pseudo_bytes(22))) . '$'; } function sha512_salt($cost) { return "\$6\$rounds=" . $cost . "\$" . openssl_random_pseudo_bytes(16) . '$'; } $password = "stackoverflow"; $times = 1; echo "<p>bcrypt method</p>"; for($iters = 10; $iters < 15; ++$iters) { $salt = bcrypt_salt(strval($iters)); $pword_crypt = crypt($password, $salt); $start_time = microtime(true); for($i = 0; $i < $times; ++$i) { crypt($password, $pword_crypt); } $end_time = microtime(true); echo "<p> cost = $iters: " . ($end_time - $start_time) . "</p>"; } echo "<p>SHA512 method</p>"; for($iters = 1024; $iters < 1000000; $iters *= 2) { $salt = sha512_salt(strval($iters)); $pword_crypt = crypt($password, $salt); $start_time = microtime(true); for($i = 0; $i < $times; ++$i) { crypt($password, $pword_crypt); } $end_time = microtime(true); echo "<p> log2(iters) = ". log($iters,2) . ": " . ($end_time - $start_time) . "</p>"; }
Test results (time in seconds):
Ran on my laptop with i5-m430:
Bcrypt method
cost = 10: 0.11740303039551
cost = 11: 0.23875308036804
cost = 12: 0.46739792823792
cost = 13: 0.96053194999695
cost = 14: 1.8993430137634
SHA512 Method
log2 (iters) = 10: 0.0034840106964111
log2 (iters) = 11: 0.0077731609344482
log2 (iters) = 12: 0.014604806900024
log2 (iters) = 13: 0.02855396270752
log2 (iters) = 14: 0.068222999572754
log2 (iters) = 15: 0.12677311897278
log2 (iters) = 16: 0.24734497070312
log2 (iters) = 17: 0.54663610458374
log2 (iters) = 18: 1.0215079784393
log2 (iters) = 19: 2.0223300457001
If things are equal, more iterations are required for the SHA-512 and bcrypt methods to get the same amount of time. However, I assume that any method that takes at least one tenth of a second is more than sufficient.