storage_path laraveles array_add array string function random laravel uuid

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.