Added support for password generation cost/rounds

$CONF["php_crypt_difficulty"], only for php_crypt:BLOWFISH, php_crypt:SHA256 and php_crypt:SHA512
pull/181/head
Aleksi Kinnunen 6 years ago committed by GitHub
parent 6100ca4cf9
commit 9c2161a549
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1106,7 +1106,10 @@ function _php_crypt_generate_crypt_salt($hash_type='SHA512') {
case 'BLOWFISH':
$length = 22;
$cost = 10;
$cost = (int)$CONF['php_crypt_difficulty'];
if ($cost < 4 || $cost > 31) {
die('invalid $CONF["php_crypt_difficulty"] setting: ' . $CONF['php_crypt_difficulty'] . ', for ' . $hash_type . ' the valid range is 4-31');
}
if (version_compare(PHP_VERSION, '5.3.7') >= 0) {
$algorithm = '2y'; // bcrypt, with fixed unicode problem
} else {
@ -1118,14 +1121,22 @@ function _php_crypt_generate_crypt_salt($hash_type='SHA512') {
case 'SHA256':
$length = 16;
$algorithm = '5';
$rounds = (int)$CONF['php_crypt_difficulty'];
if ($rounds < 1000 || $rounds > 999999999) {
die('invalid $CONF["php_crypt_difficulty"] setting: ' . $CONF['php_crypt_difficulty'] . ', for ' . $hash_type . ' the valid range is 1000-999999999');
}
$salt = _php_crypt_random_string($alphabet, $length);
return sprintf('$%s$%s', $algorithm, $salt);
return sprintf('$%s$rounds=%d$%s', $algorithm, $rounds, $salt);
case 'SHA512':
$length = 16;
$algorithm = '6';
$rounds = (int)$CONF['php_crypt_difficulty'];
if ($rounds < 1000 || $rounds > 999999999) {
die('invalid $CONF["php_crypt_difficulty"] setting: ' . $CONF['php_crypt_difficulty'] . ', for ' . $hash_type . ' the valid range is 1000-999999999');
}
$salt = _php_crypt_random_string($alphabet, $length);
return sprintf('$%s$%s', $algorithm, $salt);
return sprintf('$%s$rounds=%d$%s', $algorithm, $rounds, $salt);
default:
die("unknown hash type: '$hash_type'");

Loading…
Cancel
Save