/ / std :: algorytm i rozmiar - c ++, algorytm, c ++ 11, hash, stdhash

algorytm std :: hash i rozmiar - c ++, algorytm, c ++ 11, hash, stdhash

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 № 1

Algorytm 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:

  1. Akceptuje pojedynczy parametr typu Key.
  2. Zwraca wartość typu size_t reprezentuje wartość skrótu parametru.
  3. Nie generuje wyjątków po wywołaniu.
  4. Dla dwóch parametrów k1 i k2 które są równe, std::hash<Key>()(k1) == std::hash<Key>()(k2).
  5. Dla dwóch różnych parametrów k1 i k2 które nie są równe, prawdopodobieństwo, że std::hash<Key>()(k1) == std::hash<Key>()(k2) powinien być bardzo mały, zbliża się 1.0/std::numeric_limits<size_t>::max().