Edit report at http://bugs.php.net/bug.php?id=51282&edit=1
ID: 51282 Comment by: paul dot fernandez at gmail dot com Reported by: jerome dot auge at anakeen dot com Summary: crypt() result different between PHP 5.3.1 and PHP 5.3.2 Status: Assigned Type: Documentation Problem Package: *Encryption and hash functions Operating System: Mac, Linux PHP Version: 5.3.2 Assigned To: joey New Comment: I have a similar problem going from PHP 5.2.8 to 5.3.0. <?php if(CRYPT_STD_DES == 1) { echo "Standard DES is available.\n\n"; } $username = 'aardvark'; $password = 'password'; $salt = substr($username, 0, 1); echo "\$salt = $salt\n"; $pass = crypt($password, $salt); echo "Standard crypt encryption (1 char salt) = '$pass'\n"; $des_pass = crypt($password, 'a$'); echo "DES encryption (2 char salt) = '$des_pass'\n"; ?> Output from PHP 5.3.0: $ php test24.php Standard DES is available. $salt = a Standard crypt encryption (1 char salt) = 'a$Av8awQ0AsR6' DES encryption (2 char salt) = 'a$Av8awQ0AsR6' Output of the same code on PHP 5.2.8: $ php test24.php Standard DES is available. $salt = a Standard crypt encryption (1 char salt) = 'a$LHSkrbhfU1.' DES encryption (2 char salt) = 'a$LHSkrbhfU1.' Previous Comments: ------------------------------------------------------------------------ [2010-03-12 10:54:22] jerome dot auge at anakeen dot com Description: ------------ I use crypt() to store and validate passwords using the « Standard DES » hash, and after upgrading to 5.3.2, the hashed password of an account is not the same as the one generated with PHP 5.3.1 : With PHP 5.3.1 : $ php -r 'print crypt("anakeen", "A^")."\n";' A^1ul2Jf7VS2M After upgrading to PHP 5.3.2 : $ php -r 'print crypt("anakeen", "A^")."\n";' A^/ImZ5hqd2VU I tested both on Mac (macports) and on Linux (rawhide), and the hash result was different on both platform. On Mac OS X (10.5), the Perl (or C) crypt gives me the same results as PHP 5.3.1 : $ perl -e 'print crypt("anakeen", "A^")."\n";' A^1ul2Jf7VS2M While on Linux, the Perl script gives me the same result as PHP 5.3.2. It appears that there is a difference in the crypt() function, between these platforms, regarding the presence of non alpha-num chars in the salt : Mac OS X with "A-" salt = different hashes : $ php -r 'print crypt("anakeen", "A-")."\n";' A-75An91LCLEM $ perl -e 'print crypt("anakeen", "A-")."\n"'; A-1ul2Jf7VS2M Mac OS X with "A9" salt = same hashes : $ perl -e 'print crypt("anakeen", "A9")."\n"'; A9Pf3.gAayQMM $ php -r 'print crypt("anakeen", "A9")."\n";' A9Pf3.gAayQMM Maybe I should not have used non alpha-num chars for my salt in the first place ? ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/bug.php?id=51282&edit=1