string - laraveles - storage_path laravel 5
Laravel str_random() o funciĆ³n personalizada? (1)
str_random
( Str::random()
) intenta utilizar openssl_random_pseudo_bytes
que es un generador de números pseudoaleatorios optimizado para la criptografía, no la unicidad. Si openssl_random_pseudo_bytes
no está disponible, quickRandom()
a quickRandom()
:
public static function quickRandom($length = 16)
{
$pool = ''0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'';
return substr(str_shuffle(str_repeat($pool, 5)), 0, $length);
}
En mi opinión, el código de quickRandom
no es confiable para la singularidad ni la criptografía.
Sí, tener openssl_random_pseudo_bytes
y usar 32 bytes es casi imposible ver una colisión, pero aún es posible. Si desea asegurarse de que sus cadenas / números sean únicos (99.99%), es mejor que use una función UUID. Esto es lo que normalmente uso:
/**
*
* Generate v4 UUID
*
* Version 4 UUIDs are pseudo-random.
*/
public static function v4()
{
return sprintf(''%04x%04x-%04x-%04x-%04x-%04x%04x%04x'',
// 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid"
mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
Genera un UID Válido RFC 4211 COMPLIANT versión 4.
Compruebe esto: http://en.wikipedia.org/wiki/UUID#Random%5FUUID%5Fprobability%5Fof%5Fduplicates
¿Es la función Laravel str_random () lo suficientemente aleatoria para que pueda usarla para las ID?
Por ejemplo:
str_random(32);
Esto produce una cadena aleatoria de longitud 32 compuesta de caracteres alfanuméricos [a-zA-z0-9] (62 caracteres en total).
Lo que equivale a 2272657884496751345355241563627544170162852933518655225856 posibilidades.
Sin embargo, mi pregunta es, ¿será esto suficientemente bueno? O debería considerar el uso de UUID u otra función personalizada.