我正在尝试找一个散列字符串的好方法。 This method工作正常,但结果与this website不一致:
(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)
)
当我使用它时,我确实得到了哈希。问题是我正在尝试programming exercise at advent of code并且它有自己的字符串哈希示例,它提供了与上述2不同的第3个结果!
如何以总是预期的“标准”方式制作md5?
答案 0 :(得分:2)
你的MD5操作是正确的;你没有正确地展示它们。
由于MD5长度为32个十六进制字符,因此您需要格式化字符串以将其正确填充。
换句话说,只需更改此表达式:
(.toString (new java.math.BigInteger 1 (.digest hashed)) base))
使用format
:
(format "%032x" (new java.math.BigInteger 1 (.digest hashed)))))