⊗ppPmAuHFP 426 of 447 menu

Функción password_hash

En realidad, la función md5 y la salazón de contraseñas con ella se considera obsoleta. La estudiamos para que entendierais el material posterior, y también porque podéis encontrarla trabajando en proyectos ajenos.

Existe una forma más avanzada de obtener una contraseña salada. Para ello se usa la función password_hash. Su primer parámetro es una cadena, y el segundo - el algoritmo de cifrado (sobre esto más tarde), y devuelve el hash de esta cadena junto con la sal.

Intenta ejecutar este código varias veces:

<?php echo password_hash('12345', PASSWORD_DEFAULT); ?>

Cada vez obtendrás un resultado diferente y en este resultado la primera parte de la cadena será la sal, y la segunda parte - la contraseña salada.

Supongamos que tenemos un hash, obtenido de la función password_hash y alguna contraseña. Para comprobar si es el hash de esta contraseña o no, se debe usar la función password_verify - su primer parámetro es la contraseña, y el segundo - el hash, y devuelve true o false.

Veamos un ejemplo:

<?php $password = '12345'; // contraseña $hash = '$2y$10$xoYFX1mFPxBSyxaRe3iIRutxkIWhxGShzEhjYUVd3qpCUKfJE1k7a'; // hash if (password_verify($password, $hash)) { // el hash es de esta contraseña } else { // el hash no es de esta contraseña } ?>

¿Qué nos aporta esto en la práctica: podemos evitar crear un campo separado en la base de datos para almacenar la sal, no preocuparnos por generar esta sal - ¡PHP lo hará todo por nosotros!

Es decir, en la base de datos, en el campo password almacenaremos la contraseña salada junto con su sal. Además, la contraseña con hash tendrá una longitud mayor. Por lo tanto, en la base de datos necesitamos corregir el tamaño del campo de la contraseña y establecerlo en 60 caracteres.

Ahora corrijamos el código de registro. Esto es lo que hay actualmente:

<?php function generateSalt() { $salt = ''; $saltLength = 8; // longitud de la sal for($i = 0; $i < $saltLength; $i++) { $salt .= chr(mt_rand(33, 126)); // carácter de la tabla ASCII } return $salt; } $salt = generateSalt(); // sal $password = md5($salt . $_POST['password']); // convertimos la contraseña en hash salado ?>

Con password_hash podemos reducirlo a:

<?php $password = password_hash($_POST['password'], PASSWORD_DEFAULT); ?>

De manera similar se modifica el código de autorización:

<?php $login = $_POST['login']; $query = "SELECT * FROM users WHERE login='$login'"; // obtenemos el usuario por login $res = mysqli_query($link, $query); $user = mysqli_fetch_assoc($res); if (!empty($user)) { $hash = $user['password']; // contraseña salada de la BD // Verificamos la correspondencia del hash de la base de datos con la contraseña ingresada if (password_verify($_POST['password'], $hash)) { // todo bien, autorizamos... } else { // la contraseña no coincide, mostramos mensaje } } else { // no hay usuario con ese login, mostramos mensaje } ?>

Modifica tu autorización y registro utilizando las nuevas funciones aprendidas.

Español
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Usamos cookies para el funcionamiento del sitio, análisis y personalización. El procesamiento de datos se realiza de acuerdo con la Política de privacidad.
aceptar todas configurar rechazar