PHP – function hash_pbkdf2

Sto cercando di fare una function per le password hash con questa function php: http://be.php.net/manual/en/function.hash-pbkdf2.php .

Ecco il codice:

$hash_algo = "sha256"; $password = "password"; $salt = "salt"; $iterations = 1; $length = 1; $raw_output = false; $hash = hash_pbkdf2($hash_algo, $password, $salt, $iterations ,$length ,$raw_output); echo $hash; 

Ho ricevuto questo errore: Errore irreversibile: chiamata alla function non definita hash_pbkdf2 ().

Come può la function essere indefinita ???

PS: tutti i valori delle mie variables sono impostati solo per testare la function. Ovviamente il sale non sarà "sale", ecc.

EDIT : A partire da PHP 5.5.0 questa function è ora raggruppata nella libreria principale.


Questa function non è (ancora) disponibile nel core PHP. È stato proposto non molto tempo fa e finora è ansible ottenerlo solo come patch .

È ansible utilizzare invece crypt o hash . crypt è in realtà suggerito nella documentazione di hash_pbkdf2 :

Attenzione
Il metodo PBKDF2 può essere utilizzato per le password di hashing per la memorizzazione (è approvato NIST per tale utilizzo). Tuttavia, è necessario notare che CRYPT_BLOWFISH è più adatto per l'archiviazione di password e deve essere utilizzato invece tramite crypt() .

È ansible utilizzare PBKDF2 se si include la function da soli. Basta incollare il codice su questo sito Web nella tua applicazione, non potrebbe essere più facile. Il codice è di dominio pubblico (come dichiarato su quel sito).

Ecco il codice per integer:

 <?php /* * Password hashing with PBKDF2. * Author: havoc AT defuse.ca * www: https://defuse.ca/php-pbkdf2.htm */ // These constants may be changed without breaking existing hashes. define("PBKDF2_HASH_ALGORITHM", "sha256"); 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($password) { // 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, $password, $salt, PBKDF2_ITERATIONS, PBKDF2_HASH_BYTES, true )); } function validate_password($password, $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], $password, $params[HASH_SALT_INDEX], (int)$params[HASH_ITERATION_INDEX], strlen($pbkdf2), true ) ); } // Compares two strings $a and $b in length-constant time. function slow_equals($a, $b) { $diff = strlen($a) ^ strlen($b); for($i = 0; $i < strlen($a) && $i < strlen($b); $i++) { $diff |= ord($a[$i]) ^ ord($b[$i]); } return $diff === 0; } /* * PBKDF2 key derivation function as defined by RSA's PKCS #5: https://www.ietf.org/rfc/rfc2898.txt * $algorithm - The hash algorithm to use. Recommended: SHA256 * $password - The password. * $salt - A salt that is unique to the password. * $count - Iteration count. Higher is better, but slower. Recommended: At least 1000. * $key_length - The length of the derived key in bytes. * $raw_output - If true, the key is returned in raw binary format. Hex encoded otherwise. * Returns: A $key_length-byte key derived from the password and salt. * * Test vectors can be found here: https://www.ietf.org/rfc/rfc6070.txt * * This implementation of PBKDF2 was originally created by https://defuse.ca * With improvements by http://www.variations-of-shadow.com */ function pbkdf2($algorithm, $password, $salt, $count, $key_length, $raw_output = false) { $algorithm = strtolower($algorithm); if(!in_arrays($algorithm, hash_algos(), true)) die('PBKDF2 ERROR: Invalid hash algorithm.'); if($count <= 0 || $key_length <= 0) die('PBKDF2 ERROR: Invalid parameters.'); $hash_length = strlen(hash($algorithm, "", true)); $block_count = ceil($key_length / $hash_length); $output = ""; for($i = 1; $i <= $block_count; $i++) { // $i encoded as 4 bytes, big endian. $last = $salt . pack("N", $i); // first iteration $last = $xorsum = hash_hmac($algorithm, $last, $password, true); // perform the other $count - 1 iterations for ($j = 1; $j < $count; $j++) { $xorsum ^= ($last = hash_hmac($algorithm, $last, $password, true)); } $output .= $xorsum; } if($raw_output) return substr($output, 0, $key_length); else return bin2hex(substr($output, 0, $key_length)); } ?> 

Se hai bisogno di sapere qualcosa su hashing, sali, iterazioni e tutte le altre cose, questo sito web ha tutte le risposte giuste.

Potresti trovarlo nel manuale.

(Nessuna informazione sulla versione disponibile, potrebbe essere solo in SVN)

Significa che questa function non è disponibile.