|
php.net | support | documentation | report a bug | advanced search | search howto | statistics | random bug | login |
[2013-06-21 22:37 UTC] michael at squiloople dot com
Description:
------------
When manually setting a salt which contains spaces the function ignores it and
automatically generates its own.
Test script:
---------------
echo password_hash('this is a test', PASSWORD_DEFAULT, array('salt' => 'thisisatestthisisatest'));
echo '<br>';
echo password_hash('this is a test', PASSWORD_DEFAULT, array('salt' => 'thisisatestthisis test'));
Expected result:
----------------
$2y$10$thisisatestthisisateseLNFJ7M2ONUSijVBKli7sVFN6rQm7o36
$2y$10$thisisatestthisis tesOZPioeRNSLNeG3cuJW56OSusfQ5SjKdO
(with the part after the salt being whatever it would be)
Actual result:
--------------
$2y$10$thisisatestthisisateseLNFJ7M2ONUSijVBKli7sVFN6rQm7o36
$2y$10$dGhpc2lzYXRlc3R0aGlzaOZPioeRNSLNeG3cuJW56OSusfQ5SjKdO
PatchesPull RequestsHistoryAllCommentsChangesGit/SVN commits
|
|||||||||||||||||||||||||||
Copyright © 2001-2025 The PHP GroupAll rights reserved. |
Last updated: Sun Oct 26 01:00:01 2025 UTC |
This is not a bug. This is as designed. The reason is that crypt requires a salt that's base64 encoded. A space character is not a valid character in the salt. Therefore, password_hash will attempt to use the salt directly (if it's valid in the base64 character set). But any character outside a-zA-Z0-9./ and it'll base64 encode the salt first. You can test this yourself: echo password_hash('this is a test', PASSWORD_DEFAULT, array('salt' => 'thisisatestthisis test')); echo "\n"; echo password_hash('this is a test', PASSWORD_DEFAULT, array('salt' => 'thisisatestthisis test')); Produces the same result twice in a row: $2y$10$dGhpc2lzYXRlc3R0aGlzaOZPioeRNSLNeG3cuJW56OSusfQ5SjKdO $2y$10$dGhpc2lzYXRlc3R0aGlzaOZPioeRNSLNeG3cuJW56OSusfQ5SjKdO Which indicates that it's actually encoding the salt you pass in, rather than generating a random one. So it's still using your salt, and it's most definitely not failing. Closing as Not A Bug. Thanks for the report!