La meilleure façon de comparer sha1 hachages pour l'égalité
Question
Je veux comparer deux sha1 hachages pour l'égalité.Ce qui pourrait être le moyen le plus efficace pour ce faire?Actuellement, je suis en train d'essayer en utilisant comparateur de mémoire.Merci.
La solution
Eh bien, puisque vous savez déjà au moment de la compilation comment grand les blocs sont, vous pourriez faire ceci:
#include <cstdint>
bool is_same_sha1(const char* p, const char* q)
{
const std::uint32_t* a = (const std::uint32_t*)p;
const std::uint32_t* b = (const std::uint32_t*)q;
return a[0] == b[0] && a[1] == b[1] && a[2] == b[2]
&& a[3] == b[3] && a[4] == b[4];
}
Mais ne prenez pas mon avis à l'aveuglette, vous devriez mesure toute solution personnalisée à l'encontre de la memcmp
solution et l'utiliser seulement si elle vous donne un avantage de performance significative.Je ne serais même pas surpris si la memcmp
a été encore plus rapide parce qu'il fait quelque chose d'extrêmement intelligent et sale.
Autres conseils
Quel est le problème avec memcmp()
?Vous devez comparer tous les octets de deux hachages; memcmp()
rapidement échouer sur la première différence qu'il trouve;et memcmp()
peut être écrit par la bibliothèque des auteurs à travailler dans des tailles de segment qui sont de bons choix pour la plate-forme.
std::equal
semble être le meilleur pari, mais memcmp
serait aussi travailler.En ce qui concerne l'efficacité, il dépendra de la mise en œuvre, mais
aussi (peut-être) comment les données sont définies et représentés.