我想找一种很好的散列方法。这种方法运行良好,但结果与本网站不一致。
(defn hash-string
"Use java interop to flexibly hash strings"
[string algo base]
(let [hashed
(doto (java.security.MessageDigest/getInstance algo)
(.reset)
(.update (.getBytes string)))]
(.toString (new java.math.BigInteger 1 (.digest hashed)) base))
)
(defn hash-md5
"Generate a md5 checksum for the given string"
[string]
(hash-string string "MD5" 16)
) 当我使用这个时,我确实会得到哈希。问题是我正在尝试一个代码出现时的编程练习,它有它自己的字符串散列示例,它提供了与上面的2不同的第三个结果!
如何才能按照人们一直期望的“标准”方式来做md5呢?
发布于 2015-12-20 08:41:43
您的MD5操作是正确的;只是没有正确地显示它们。
由于MD5长为32个十六进制字符,因此需要格式化字符串才能正确地将其删除。
换句话说,只需更改这个表达式:
(.toString (new java.math.BigInteger 1 (.digest hashed)) base))到使用format的
(format "%032x" (new java.math.BigInteger 1 (.digest hashed)))))https://stackoverflow.com/questions/34379009
复制相似问题