php - Crypt generating *0 -
crypt is, sometimes, generating string *0 instead of real hash.
const salt_byte_size = 24; const hash_payload = 13; public static function createhash($password, $cost = self::hash_payload) { $salt = '$2a$' . $cost . '$' . base64_encode(mcrypt_create_iv(self::salt_byte_size, mcrypt_dev_urandom)); $password = crypt($password, $salt); return $password; } i found line base64_encode(mcrypt_create_iv(self::salt_byte_size, mcrypt_dev_urandom)); somewhere around stackoverflow, stating way generate random salt. been few weeks couldn't find answer again. wonder if random salt maybe causing crypt generate string *0.
the given password alphanumeric string, 8 chars long.
crypt returns *0 if given invalid salt - , that's case here. quoting the doc:
blowfish hashing salt follows:
"$2a$","$2x$"or"$2y$", 2 digit cost parameter,"$", , 22 characters alphabet"./0-9a-za-z"
most probably, you've assumed base64_encode() returns strings of same set of characters. it's not - there's + sign (the full alphabet [a-za-z0-9+/]).
an obvious workaround replacing + .:
$salt = '$2a$' . $cost . '$' . str_replace('+', '.', base64_encode(mcrypt_create_iv(self::salt_byte_size, mcrypt_dev_urandom)));
Comments
Post a Comment