Comment générer un identifiant de session unique en Python?
Réponses
Trop de publicités?Je déteste dire cela, mais aucune des autres solutions postées ici sont corrects en ce qui concerne d'être un "secure ID de session."
# pip install M2Crypto
import base64, M2Crypto
def generate_session_id(num_bytes = 16):
return base64.b64encode(M2Crypto.m2.rand_bytes(num_bytes))
Ni uuid()
ou os.urandom()
sont de bons choix pour générer des Identifiants de session. Les deux peuvent générer de l' aléatoire des résultats, mais au hasard ne signifie pas qu'il est sécurisé en raison de la mauvaise entropie. Voir "Comment faire Craquer un Générateur Linéaire à Congruence" par Haldir ou du NIST ressources sur la Génération de Nombre Aléatoire. Si vous souhaitez utiliser un UUID, puis d'utiliser un UUID qui a été généré avec un bon nombre aléatoire:
import uuid, M2Crypto
uuid.UUID(bytes = M2Crypto.m2.rand_bytes(num_bytes)))
# UUID('5e85edc4-7078-d214-e773-f8caae16fe6c')
ou:
# pip install pyOpenSSL
import uuid, OpenSSL
uuid.UUID(bytes = OpenSSL.rand.bytes(16))
# UUID('c9bf635f-b0cc-d278-a2c5-01eaae654461')
M2Crypto est le meilleur OpenSSL API en Python atm comme pyOpenSSL semble être maintenue que pour soutenir des applications héritées.
Vous pouvez utiliser la bibliothèque uuid comme ceci:
importer de l'uuid mon_id = uuid.uuid1 () # ou uuid.uuid4 ()
Cela peut être aussi simple que de créer un nombre aléatoire. Bien sûr, vous devez stocker vos identifiants de session dans une base de données ou quelque chose de ce type et vérifier chacun de ceux que vous générez pour vous assurer qu'il ne s'agit pas d'un doublon, mais il est peu probable que ce sera le cas si les nombres sont suffisamment grands.
A quoi sert la session? Une application web? Vous voudrez peut-être regarder le module bécher . C'est le module par défaut pour gérer les sessions dans les pylônes.