Pregunta

¿Cuál es una forma en PHP para hacer una sal largo arbitrario, variable para su uso en hash? Digamos que yo quiero hacer una sal largo de 16 caracteres -? ¿Cómo iba a hacerlo

No hay solución correcta

Otros consejos

editar: la extensión mcrypt ya no se utiliza. Para los nuevos proyectos de echar un vistazo a
random_bytes (int $ longitud)
y la de sodio (a partir de 7,2 núcleo-php) de extensión.


Si el mcrypt extensión está disponible se puede usar simplemente mcrypt_create_iv (tamaño, fuente) para crear una sal.

$iv = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
var_dump($iv);

Debido a que cada byte de la "cadena" puede estar en el rango entre 0-255 necesita una función binaria de seguridad para guardar / recuperarlo.

dependiendo de su sistema operativo, algo como:

$fh=fopen('/dev/urandom','rb');
$salt=fgets($fh,16);
fclose($fh);

No leer sobre el comportamiento de azar y urandom.

Mientras que otros han señalado correctamente que hay algunos problemas con MD5 hash y repetida, por contraseñas (es decir, cadenas relativamente cortas) ataques de fuerza bruta tomar la misma cantidad de tiempo, independientemente de cuán sofisticado algoritmo de hash es.

C.

Aquí es que encontré una función para generar cadena aleatoria:

/* random string */
function rand_string( $length ) {
    $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";  
    $size = strlen( $chars );
    for( $i = 0; $i < $length; $i++ ) {
        $str .= $chars[ rand( 0, $size - 1 ) ];
    }
    return $str;
}

Hay dos requisitos previos para una buena sal: Debe ser larga, y tiene que ser al azar. Hay muchas formas de lograr esto. Se podría utilizar una combinación de microtime y rand, por ejemplo, pero que podrían ir a extremos aún mayores para asegurar que su sal es única.

Si bien la posibilidad de una colisión es despreciable, tenga en cuenta que su hash MD5 o sal con otros algoritmos de colisión propensa reducirá la posibilidad de que su sal es única por ninguna razón.

EDIT: rand() Sustituto de mt_rand(). Como se ha señalado Michael, que es mejor que rand.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top