¿Cómo puedo generar una cadena de texto aleatorio criptográficamente segura en PHP (para usar como contraseña)?
Permitido: a-z, A-Z, 0-9 Bloqueado: Todo lo demás
Las computadoras no son muy buenas para generar aleatoriedad "verdadera"; solo PHP no te dará eso. Pero puede obtener algo que sea lo suficientemente impredecible como para usarlo en la generación de contraseñas.
Utilice int random_int ( int $min , int $max )
. Utilizará un CSPRNG .
Cómo pasar de poder generar enteros aleatorios en un cierto intervalo para generar una contraseña aleatoria es una pregunta de programación, y no una pregunta de seguridad. Por lo tanto, solo sugeriré brevemente que haga una cadena de todos los caracteres permitidos y que tenga un bucle for que elija una letra aleatoria de esa cadena a la vez.
Yo diría que en ciencias de la computación hablar de "cadenas de texto verdaderamente aleatorias" no es tan fácil.
Algunas cosas que haría es usar la función rand y establecer las 26 letras como 0- 25 y los 10 números como 26-35. Así que si rand (0,35), si obtiene los 3, tiene una d en su contraseña, igual que si desea obtener letras mayúsculas, los incluye a la función rand ().
Tenga en cuenta que esto es para obtener elementos pseudoaleatorios, por lo que si tiene cada uno de los elementos como "pseudoaleatorios" y tiene suficientes contraseñas grandes configuradas de esta manera, es imposible con la capacidad informática que tenemos hoy, que alguna computadora podría obtén tu contraseña.
Creo que esta es la forma más rápida de solucionar esto.
¿Querías decir algo como esto?
<?php
$alphabet = array('a','b','c','d','e','f','g','h','i','j','k','l','m','o','p','q','r','s','t','u','v','w','x','y','z','A','B','C','D','E','F','G','H','I','J','K','L','M','O','P','Q','R','S','T','U','V','W','X','Y','Z','0','1','2','3','4','5','6','7','8','9');
$random = array_rand($alphabet, 10); #set the length
foreach ($random as $letter) { echo $alphabet[$letter]; }
?>