Python et touches aléatoires de 21 caractères maximum


Answers

La représentation hexadécimale de MD5 a un très mauvais caractère aléatoire: vous obtenez seulement 4 bits d'entropie par caractère.

Utilisez des caractères aléatoires, quelque chose comme:

import random
import string
"".join([random.choice(string.ascii_letters + string.digits + ".-")
        for i in xrange(21)])

Dans le choix mettre tous les caractères acceptables.

Si vous utilisez une fonction de hachage réelle telle que SHA1, vous obtiendrez également de bons résultats si vous l'utilisez correctement , la complexité ajoutée et la consommation du processeur ne semblent pas justifiées selon vos besoins. Vous voulez seulement une chaîne aléatoire.

Question

J'utilise une API qui prend un nom de 21 caractères maximum pour représenter une session interne qui a une durée de vie d'environ "deux jours". Je voudrais que le nom ne soit pas significatif en utilisant une sorte de possession? md5 génère 40 caractères, y a-t-il autre chose que je pourrais utiliser?

Pour l'instant j'utilise 'userid [: 10]' + temps de création: ddhhmmss + random 3 caractères.

Merci,




Le module base64 peut effectuer un encodage sûr pour l'URL. Donc, si nécessaire, au lieu de

u.bytes.encode("base64")

vous pourriez faire

import base64

token = base64.urlsafe_b64encode(u.bytes)

et, commodément, pour reconvertir

u = uuid.UUID(bytes=base64.urlsafe_b64decode(token))