On Fri, 2024-07-26 at 00:44 +0200, Juliette Reinders Folmer wrote: > On 26-7-2024 0:00, Nick Lockheart wrote: > > > > > That's a good point. What if there were crypto functions that > > worked > > like password_hash() in that they had one generic function name, > > but > > magically used the new/better "best practice" algorithms as time > > went > > by without the need to update any calling code? > > > > Maybe there should be three generic-named functions: > > > > fast_hash() // not secure, makes UIDs quickly > > secure_hash() // uses best practice one-way hash algo > > secure_crypt() // uses best practice reversible encryption. > > While I like the idea, this sounds like a huge nightmare in the > waiting when data is stored somewhere and later compared. > > Example: > * Let's say these functions get introduced in PHP 8.5. > * `secure_hash()` is used in an application running on PHP 8.5 to > secure some data before storing it in a database. This data is used > in comparisons - stored vs user provided. > * Now in PHP 9.1, the hash algorithm is changed. > * The production environment gets updated to PHP 9.1 and suddenly > the application breaks as the data verification will no longer work > as the new algo is used on the user provided data, but the database > stored version of the same data was created with the old algo.... >
Doesn't password_hash() handle this automatically? The result of the password_hash() function includes the hash and the algorithm used to hash it. That way password_verify() magically works with the string that came from password_hash().