54 votes

Comment aléatoire est System.Guid.NewGuid ()?

Je sais que cela sonne comme une question bizarre, mais écoutez-moi...

En gros, je veux savoir si je peux faire confiance le GUID pour générer une valeur qui sera unique 100% du temps, et impossible à prédire.

Je suis fondamentalement de rouler sur mon système de connexion pour un site web et vous voulez savoir si le GUID est suffisamment sécurisé pour les cookies de session.

Tout d'arrière-plan sur la façon dont le GUID est généré serait bien apprécié dans l'évaluation des réponses.

Merci pour les liens pour dupliquer des questions, cependant, ma question est spécifique à l' .Net framework.

30voto

Runscope API Tools Points 43859

12voto

Marc Gravell Points 482669

Aucune valeur de longueur fixe ne peut jamais garantir d'être unique à 100% (il suffit de l'appeler suffisamment de fois, de donner ou de prendre la fin de l'univers ;-p) - mais cela peut être très très très peu dupliqué.

5voto

tvanfosson Points 268301

Je ne peux pas parler de la prévisibilité des nombres séquentiels mais ce sera unique. Je pense toutefois que vous feriez mieux d'utiliser un générateur de nombres aléatoires de System.Security.Cryptography. Nouez un nombre aléatoire dont la valeur (le temps) augmente de façon monotone pour générer votre clé unique. Vous pouvez ainsi être sûr qu’elle est unique et non prévisible.

3voto

Jason S Points 58434

Je ne sais pas à propos .NET, mais l' UUID de l'algorithme est défini de manière assez précise.

edit: si vous regardez à l'bits (voir wikipedia (en anglais), qu'il faut expliquer de la version de l'UUID est utilisé.

edit 2: un drapeau rouge pour votre usage du mot "sécurité", qui me dit que vous êtes mieux d'utiliser un bien définis méthode cryptographique. Par exemple, lors de la génération des Identifiants de session sur un serveur, pourquoi ne pas faire quelque chose de simple comme appliquer un hachage MD5 de la concaténation d'un sous-ensemble suivant: {client adresse IP de l'appareil, de manière séquentielle compteur incrémenté, fixe secret de la constante de votre choix, la sortie du générateur de nombre aléatoire de votre choix, etc.} ?

3voto

user22290 Points 949

En supposant que System.Guid.NewGuid utilise CoCreateGuid, ce n'est pas aléatoire du tout. Auparavant, l'algorithme utilisé pour créer des guides consistait à incorporer l'adresse MAC d'une carte réseau, en plus de certaines autres choses, telles que l'heure. Je ne sais pas si l'algorithme a changé. Bien que ce ne soit certainement pas aléatoire, il est garanti d'être unique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X