Algorithmes de hachage SQL Server

Si ma longueur d'input est inférieure à la longueur de la sortie de hachage, existe-t-il des algorithms de hachage qui ne peuvent garantir aucune collision?

Je sais par nature qu'un hachage à sens unique peut avoir des collisions entre plusieurs inputs en raison de la nature avec perte du hachage, surtout lorsque la taille d'input est souvent supérieure à la taille de sortie, mais cela s'applique-t-il aux tailles d'input plus petites?

Utilisez un chiffrement de bloc symésortingque avec une key statique choisie au hasard. Le encryption ne peut jamais produire de doublon, car cela empêcherait le déencryption sans ambiguïté.

Ce schéma forcera une certaine longueur de sortie qui est un multiple de la taille du bloc de chiffrement. Si vous pouvez utiliser une sortie de longueur variable, vous pouvez également utiliser un chiffrement de stream.

Votre question semble être une fonction de hachage parfaite. Le problème avec les fonctions de hachage parfait est qu'ils ont tendance à être adaptés à un set spécifique de données.

Ce qui suit suppose que vous n'essayez pas de cacher, sécuriser ou crypter datatables …

En d'autres termes, la façon la plus simple de «générer» une fonction de hachage parfaite qui acceptera vos inputs est de mapper datatables que vous voulez stocker dans une table et d'associer ces inputs à une key primaire de substitution. Vous créez ensuite une contrainte unique pour la colonne (ou les colonnes) afin de garantir que l'input que vous mappez correspond uniquement à une valeur de substitution unique.

La key de substitution peut être int, bigint ou un guid. Tout dépend du nombre de lignes que vous souhaitez stocker.

Si vos longueurs d'input sont connues pour être petites, comme 32 bits, vous pouvez en fait énumérer toutes les inputs possibles et vérifier les hachages résultants pour les collisions. Cela va seulement être possible, et ne devrait pas prendre trop de time pour tous les énumérer. Essentiellement, vous construisez une table arc-en-ciel pour tester les collisions.

Si une certaine security est nécessaire, l'un des problèmes est que si un attaquant sait que vos longueurs d'input sont contraintes, il est facile pour eux d'effectuer la même énumération pour créer une table / table qui mappe les hachages vers le valeurs d'origine. "attaquant" est un terme assez terrible ici parce que je n'ai aucun context de la façon dont vous utilisez ces hachages et si vous êtes préoccupé de pouvoir les inverser.