Question

Je crée un GUID (sous forme de chaîne) et en extrait le hachage. Puis-je considérer ce hash comme unique?

Était-ce utile?

La solution

Pas aussi fiable que le GUID lui-même, non.

Juste pour développer, vous réduisez votre unicité par un facteur 4, passant de 16 octets à 4 octets de combinaisons possibles.

Comme indiqué dans les commentaires, la taille du hachage fera la différence. La chose 4 octets était une hypothèse, horrible au mieux je sais, qu'il peut être utilisé dans .NET, où la taille de hachage par défaut est 4 octets (int). Vous pouvez donc remplacer ce que j'ai dit ci-dessus par la taille en octets de votre hachage.

Autres conseils

Nope.

Voir ici, si vous souhaitez un mini GUID: http: //blogs.msdn.com/oldnewthing/archive/2008/06/27/8659071.aspx

En un mot, non.

Supposons que votre hachage comporte moins de bits que le GUID. Selon le principe du pigeon-trou, il doit exister plusieurs mappages de certains GUID - > hash simplement parce qu'il y a moins de hashes que GUIDS.

Si nous supposons que le hachage contient un plus grand nombre de bits que le GUID, il y a une très petite chance - mais finie - d'une collision, en supposant que vous utilisez une bonne fonction de hachage.

Aucune fonction de hachage qui réduit un bloc de données de taille arbitraire à un nombre de bits de taille fixe ne produira un mappage 1: 1 entre les deux. Il existera toujours une possibilité que deux blocs de données différents soient réduits à la même séquence de bits dans le hachage.

De bons algorithmes de hachage minimisent la probabilité que cela se produise et, généralement, plus il y a de bits dans le hachage, moins il y a de risques de collision.

Cela n'est pas garanti , en raison de collisions de hachage . Le GUID lui-même est presque garanti.

Pour des raisons pratiques, vous pouvez probablement supposer qu'un hachage est unique, mais pourquoi ne pas utiliser le GUID lui-même?

Non, et je ne supposerais pas l'unicité d'une valeur de hachage. Cela ne devrait pas avoir d’importance, car les valeurs de hachage n’ont pas besoin d’être uniques, elles doivent simplement être réparties uniformément sur leur gamme. Plus la distribution est homogène, moins il y a de collisions (dans la table de hachage). Moins de collisions signifie une meilleure performance de la table de hachage.

fyi Pour une bonne description du fonctionnement des tables de hachage, lisez la réponse acceptée à Que sont les tables de hachage et hashmaps et leurs cas d'utilisation typiques?

Si vous utilisez un hachage cryptographique (MD5, SHA1, RIPEMD160), le hachage sera unique (collisions modulo très improbables - SHA1 est utilisé par exemple pour les signatures numériques et MD5 est également résistant à la collision sur random entrées ). Pourquoi voulez-vous hacher un GUID?

Je voudrais hacher un GUID à la taille X en réalisant que parfois, j'ai 10 GUID ou moins dans le jeu pour que je puisse m'en tirer avec un hachage plus court sans collision que si j'avais 10 000 000 GUID dans un jeu. J'aimerais simplement pouvoir spécifier la taille du hachage lorsque j'appelle la fonction.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top