(PHP 7 >= 7.2.0, PHP 8)
sodium_crypto_pwhash_str — Devuelve un hash codificado en ASCII
$password
, int $opslimit
, int $memlimit
): stringUtiliza un algoritmo de hachéo intensivo en CPU y memoria con un sel generado aleatoriamente, y límites de memoria y CPU para generar un hash codificado en ASCII adecuado para el almacenamiento de contraseñas.
password
string; La contraseña para la cual se generará un hash.
opslimit
Representa una cantidad máxima de cálculos a realizar. Aumentar este número hará que la función requiera más ciclos de CPU para calcular una clave. Existen constantes disponibles para definir el límite de operaciones a valores apropiados según el uso previsto, en orden de fuerza: SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE
, SODIUM_CRYPTO_PWHASH_OPSLIMIT_MODERATE
y SODIUM_CRYPTO_PWHASH_OPSLIMIT_SENSITIVE
.
memlimit
La cantidad máxima de RAM que la función utilizará, en bytes. Existen constantes para ayudar a elegir un valor apropiado, en orden de tamaño: SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
, SODIUM_CRYPTO_PWHASH_MEMLIMIT_MODERATE
y SODIUM_CRYPTO_PWHASH_MEMLIMIT_SENSITIVE
. Típicamente, estos valores deberían asociarse con los valores opslimit correspondientes.
Devuelve el hash de la contraseña.
Para producir el mismo hash de contraseña a partir de la misma contraseña, los mismos valores para opslimit
y memlimit
deben ser utilizados.
Estos valores están integrados en el hash generado, por lo que todo lo necesario para verificar el hash está incluido. Esto permite
a la función sodium_crypto_pwhash_str_verify() verificar el hash sin
necesidad de almacenamiento separado para los otros parámetros.
Ejemplo #1 Ejemplo de sodium_crypto_pwhash_str()
<?php
$password = 'password';
echo sodium_crypto_pwhash_str(
$password,
SODIUM_CRYPTO_PWHASH_OPSLIMIT_INTERACTIVE,
SODIUM_CRYPTO_PWHASH_MEMLIMIT_INTERACTIVE
);
El resultado del ejemplo sería algo similar a:
$argon2id$v=19$m=65536,t=2,p=1$oWIfdaXwWwhVmovOBc2NAQ$EbsZ+JnZyyavkafS0hoc4HdaOB0ILWZESAZ7kVGa+Iw
Nota:
Los hashes son calculados utilizando el algoritmo Argon2ID, proporcionando resistencia tanto a ataques GPU como a ataques por canales laterales. A diferencia de la función password_hash(), no hay parámetro de sel (un sel es generado automáticamente), y los parámetros
opslimit
ymemlimit
no son opcionales.