Avant de commencer le marquage ce comme un doublon, lisez-moi. L'autre question a un (le plus probable) d'une mauvaise accepté de répondre.
Je ne sais pas comment .NET génère son Guid, probablement que fait Microsoft, mais il y a une forte chance qu'il appelle simplement CoCreateGuid(). Cette fonction est cependant attesté que l'appel de UuidCreate(). Et les algorithmes pour la création d'un UUID sont assez bien documentée.
Longue histoire courte, être comme il en soit, il semble qu' System.Guid.NewGuid()
, en effet, utilise la version 4 de l'UUID de l'algorithme de génération, parce que tout le Guid il génère correspond aux critères (voir par vous-même, j'ai essayé une couple de millions de Guid, ils sont tous jumelés).
En d'autres termes, ces Guid sont presque aléatoire, sauf pour quelques bits.
Ensuite, cela soulève de nouveau la question: comment aléatoire EST ce aléatoire? Comme tout bon petit programmeur sait, un nombre pseudo-aléatoire de l'algorithme est aussi aléatoire que sa graine (aka l'entropie). Alors, quelle est la graine de la UuidCreate()
? Comment souvent est le GÉNÉRATEUR ré-ensemencées? Est-il à fort niveau de chiffrement, ou puis-je espérer le même Guid commence à sortir si deux ordinateurs accidentellement appel System.Guid.NewGuid()
à la même heure? Et peut l'état du GÉNÉRATEUR de deviner si un nombre suffisant de façon séquentielle généré Guid sont réunis?
Ajouté: Pour être clair, je voudrais savoir comment aléatoire puis-je faire confiance à l'être, et donc - où puis-je l'utiliser. Donc, nous allons établir un rough "aléatoire" ici:
- De base de l'aléatoire, de prendre le temps actuel comme la graine. Utilisable pour brouiller les cartes en Solitaire, mais rien d'autre que les collisions sont trop facile à trouver, même sans essayer.
- Plus avancées de l'aléatoire, en utilisant non seulement le temps, mais d'autres spécifiques à la machine, les facteurs de semences. Peut-être aussi des graines qu'une seule fois au démarrage du système. Cela peut être utilisé pour générer des Identifiants dans une base de données parce que les doublons sont peu probables. Pourtant, il n'est pas bon pour la sécurité, car les résultats peuvent être prédits avec suffisamment d'efforts.
- Cryptograhpically aléatoire, à l'aide du bruit de l'appareil ou d'autres sources de l'aléatoire pour les semences. Ré-ensemencées sur chaque invocation ou au moins assez souvent. Peut être utilisé pour les Id de session, remis aux parties non fiables, etc.
Je suis arrivé à cette question tout en pensant que si il serait OK pour les utiliser comme DB Id, et si le Guid.le peigne de l'implémentation de l'algorithme avec System.Guid.NewGuid()
(comme NHibernate t-il) serait défectueux ou non.