Używam C ++ 11 i algorytmu std :: hash. Zastanawiałem się, jaka jest faktyczna implementacja skrótu? Zakładam MD5 lub SHA, ale nie mogę wykopać żadnych informacji z Internetu.
Ponadto chciałbym znać faktyczną zwracaną szerokość bitową skrótu, ponieważ muszę ją przechowywać w MySQL.
Wreszcie, czy lepiej jest użyć std :: hash, powiedzmy inną bibliotekę, taką jak crypto ++?
Odpowiedzi:
7 dla odpowiedzi № 1Algorytm wybrany dla std::hash
zależy wyłącznie od realizacji. Prawdopodobnie nie używa się ani MD5 ani SHA, ponieważ byłyby one celem zabójców wydajności.
Większość implementacji będzie znacznie bardziej trywialna niż powyższe, ponieważ nie ma wymogu kryptograficznego std::hash
podczas gdy MD5 i SHA zostały opracowane dla celów kryptograficznych.
The wymagania z std::hash
są znacznie mniej surowe:
- Akceptuje pojedynczy parametr typu
Key
. - Zwraca wartość typu
size_t
reprezentuje wartość skrótu parametru. - Nie generuje wyjątków po wywołaniu.
- Dla dwóch parametrów
k1
ik2
które są równe,std::hash<Key>()(k1) == std::hash<Key>()(k2)
. - Dla dwóch różnych parametrów
k1
ik2
które nie są równe, prawdopodobieństwo, żestd::hash<Key>()(k1) == std::hash<Key>()(k2)
powinien być bardzo mały, zbliża się1.0/std::numeric_limits<size_t>::max()
.