Question

Je sauvegarde des URL dans une base de données et lorsque j'enregistre un nouveau, je souhaite vérifier si cette URL existe déjà dans la base de données.

Une pratique courante (si je ne me trompe pas) est de hacher les URL à l'aide de MD5 ou SHA-1, etc. et de vérifier ce champ dans la base de données pour des doublons en insérant une nouvelle.

Je sais que MD5 peut produire des collisions, aussi SHA-1 ...

Que suggérez-vous pour moi? Mes besoins sont:

  • DB Taille: éventuellement de 10 à 20 millions d'enregistrements sur la base de données

  • performance / vitesse: petite taille de hachage afin que la base de données ne disposera pas d'une vérification de charge intense pour des doublons (il y aura l'index du parcours sur ce champ)

  • tolérance: Je m'en fiche si je reçois 1 collision sur 100 000 enregistrements. Mes besoins sont plus envers la performance (petit hachage) plutôt que de 0% de collision (Big Hash).

  • risque d'attaque par des URL mal formées pour produire des collisions exprès: extrêmement faible

  • Dommages maximum possibles dans le cas d'une attaque aussi réussie: extrêmement bas

    questions:

    • Croyez-vous que MD5 est suffisant (quelque chose de mieux à suggérer)?

    • Peut-être que MD5 est même Overkill pour moi et je pourrais sérieusement obtenir des avantages de performance en utilisant quelque chose de plus simple?

      Merci d'avance les gars!

Était-ce utile?

La solution

Qu'en est-il de l'utilisation de MD5 ou d'un hash similaire relativement peu coûteux (peut-être Quark ?), et dans le cas rarede collision vérifiant l'URL complète pour les entrées correspondantes?De cette façon, la majorité du temps que vous avez juste le chèque de hash peu coûteux, mais vous n'insérez jamais non plus une URL en double.

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