Y a-t-il une raison pour laquelle vous devez limiter la chaîne à des entiers? Cela rend le problème beaucoup plus difficile car chaque chiffre vous donne 3.3 bits (parce que 2^3.3 ~ = 10). Il est difficile de générer exactement 128 bits de jeton de cette manière.
Il est beaucoup plus facile d'autoriser le codage hexadécimal (4 bits par caractère). Vous pouvez ensuite générer 128 bits aléatoires authentiques, puis les encoder en hexadécimal pour une utilisation dans votre application. Le codage Base64 (6 bits par caractère) est également utile pour ce genre de chose.
openssl_random_pseudo_bytes
vous donnera une chaîne d'octets aléatoires que vous pouvez utiliser bin2hex
pour encoder, sinon vous pouvez utiliser mt_rand
dans votre propre routine de génération de jeton.
EDIT: Après avoir lu les mises à jour de la question, il semble que vous vouliez générer un jeton qui représente 128 bits de données et que la longueur réelle de la chaîne (en caractères) n'est pas si importante. Si je devine votre intention correctement (que c'est un ID unique, éventuellement à des fins d'identification/authentification) alors je vous suggère d'utiliser openssl_random_pseudo_bytes
pour générer le bon nombre de bits pour votre problème, dans ce cas 128 (16 octets). Vous pouvez ensuite encoder ces bits comme bon vous semble: hex et base64 sont deux possibilités. Notez que le codage hexadécimal utilise 32 caractères pour coder 128 bits de données puisque chaque caractère code seulement 4 bits (128/4 = 32). Base64 utilisera 22 caractères (128/6 = 21.3). Chaque caractère occupe 8 bits de stockage mais code seulement 4 ou 6 bits de information.
Veillez à ne pas confondre la longueur de chaîne encodée avec la longueur de données brutes. Si vous choisissez une chaîne de 16 caractères en utilisant des caractères alphanumériques (az, AZ, 0-9), vous obtenez seulement 6 bits d'information par caractère (la base de données 2 sur 62 est proche de 6), donc votre chaîne de 16 caractères encodera seulement 96 bits d'information. Vous devriez penser à votre jeton comme un tableau d'octets opaque et ne vous soucier de le transformer en/d'une chaîne de caractères que lorsque vous essayez de l'envoyer via un fil ou de le placer dans un cookie ou autre.
ce qui est d'avoir 128 bits? le numéro de la représentation de la chaîne? – Artefacto
La longueur des bits – axsuul
Axsuul, votre réponse n'a aucun sens. – Artefacto