| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 
 | <script type="text/javascript">
define("PBKDF2_HASH_ALGORITHM", "sha1");
define("PBKDF2_ITERATIONS", 1000);
define("PBKDF2_SALT_BYTES", 24);
define("PBKDF2_HASH_BYTES", 24);
 
define("HASH_SECTIONS", 4);
define("HASH_ALGORITHM_INDEX", 0);
define("HASH_ITERATION_INDEX", 1);
define("HASH_SALT_INDEX", 2);
define("HASH_PBKDF2_INDEX", 3);
 
function create_hash($usrPassword)
{
   // format: algorithm:iterations:salt:hash
   $salt = base64_encode(mcrypt_create_iv(PBKDF2_SALT_BYTES, MCRYPT_DEV_URANDOM));
   return PBKDF2_HASH_ALGORITHM . ":" . PBKDF2_ITERATIONS . ":" .  $salt . ":" .
       base64_encode(pbkdf2(
           PBKDF2_HASH_ALGORITHM,
           $usrPassword,
           base64_decode($salt),
           PBKDF2_ITERATIONS,
           PBKDF2_HASH_BYTES,
           true
       ));
}
 
function validate_password($usrPassword, $good_hash)
{
   $params = explode(":", $good_hash);
   if(count($params) < HASH_SECTIONS)
      return false;
   $pbkdf2 = base64_decode($params[HASH_PBKDF2_INDEX]);
   return slow_equals(
       $pbkdf2,
       pbkdf2(
           $params[HASH_ALGORITHM_INDEX],
           $usrPassword,
           base64_decode($params[HASH_SALT_INDEX]),
           (int)$params[HASH_ITERATION_INDEX],
           strlen($pbkdf2),
           true
       )
   );
}
   </script> | 
Partager