Clojure 哈希算法
Clojure hashing algorithm
我有工作代码,其中我使用 (hash data-structure)
获取数据结构的哈希码,但它只适用于少量数据。当我有几百万个数据结构时,它会开始给我重复的哈希值(冲突)。当数据结构的结构未知时,如何获得更独特的东西?
你总是可以求助于 md5(或者其他任何东西,真的)。
(defn md5 [^String s]
(let [algorithm (MessageDigest/getInstance "MD5")
raw (.digest algorithm (.getBytes s))]
(format "%032x" (BigInteger. 1 raw))))
(defn md5-hash [s] (md5 (pr-str s)))
(md5-hash {:a [1 2 3 '(5 6 7)]})
=> "8f941424e629b876cdcb51509521870d"
此外,您可以使用 Java 序列化而不是 pr-str
。
This library 已经存在了一段时间,我至少看到了一种替代方案。
我有工作代码,其中我使用 (hash data-structure)
获取数据结构的哈希码,但它只适用于少量数据。当我有几百万个数据结构时,它会开始给我重复的哈希值(冲突)。当数据结构的结构未知时,如何获得更独特的东西?
你总是可以求助于 md5(或者其他任何东西,真的)。
(defn md5 [^String s]
(let [algorithm (MessageDigest/getInstance "MD5")
raw (.digest algorithm (.getBytes s))]
(format "%032x" (BigInteger. 1 raw))))
(defn md5-hash [s] (md5 (pr-str s)))
(md5-hash {:a [1 2 3 '(5 6 7)]})
=> "8f941424e629b876cdcb51509521870d"
此外,您可以使用 Java 序列化而不是 pr-str
。
This library 已经存在了一段时间,我至少看到了一种替代方案。