Edit report at https://bugs.php.net/bug.php?id=65093&edit=1
ID: 65093 Updated by: ircmax...@php.net Reported by: michael at squiloople dot com Summary: password_hash ignores salts with spaces -Status: Assigned +Status: Not a bug Type: Bug Package: hash related Operating System: Windows Vista SP2 PHP Version: 5.5.0 Assigned To: ircmaxell Block user comment: N Private report: N New Comment: 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! Previous Comments: ------------------------------------------------------------------------ [2013-06-22 12:36:11] michael at squiloople dot com Would it be worth then having an error or a boolean/null return value rather than have it "fail" silently? If at any point the allowed characters for the salt were to extend then past hashes (where a salt was generated by the developer with previously invalid characters) would be broken. If you give the developer the option to provide a value then surely it should be either accepted or denied rather than just ignored. ------------------------------------------------------------------------ [2013-06-22 05:48:33] r...@php.net I think it's only a documentation problem which should explains which are the allowed characters in the salt (from code: a-z A-Z 0-9 . /) (notice: It is strongly recommended that you do not generate your own salt for this function) ------------------------------------------------------------------------ [2013-06-21 22:37:03] 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 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=65093&edit=1