Ich verstehe nicht, warum Data.HashTable
Data.Hashable
verwendet, die hashWithSalt
als die (einzige/grundlegende) Methode hat.Warum verwendet Data.HashTable Hashing mit Salz (aus Data.Hashable)?
Dies passt nicht mit der natürlichen Optimierung der Berechnung der Hash-Wert einmal, und speichern Sie es im Objekt (natürlich, weil Haskell-Objekte unveränderlich sind). Wenn ich HashTables
damit verwenden möchte, bin ich gezwungen, hashWithSalt
zu implementieren. (Going 1.2.0. * 1.2.1. *, Hashable wieder eingeführt hash
als Klassenmethode, aber das hilft nicht?)
Das tatsächliche Tabelle Implementierungen scheint nicht Gebrauch von hashWithSalt
zu machen (HashTable.ST.Linear
nicht, HashTable.ST.Cuckoo
verwendet nur zwei feste Salze).
Welches Paket betrachten Sie? http://hackage.haskell.org/package/base-4.5.1.0/docs/Data-HashTable.html verwendet "Hashable" überhaupt nicht. – dfeuer
Können Sie 'hashWithSalt' nicht in Form von' Hash' implementieren? Die Kuckuck-Version funktioniert möglicherweise nicht, aber die anderen Hashtables werden es tun. –
Der Grund dafür, dass Hashtabellen einen Hash mit einem Salt verwenden, besteht darin, Hash-Kollisions-DoS-Angriffe zu mildern, wenn ein Angreifer Schlüssel steuern kann, die in die Tabelle eingefügt wurden. Natürlich sollten sie ortsspezifische Salze anstelle von durch die Bibliothek fixierten Salzen verwenden. – Carl