MD 5散列的不同值取决于技术

时间:2015-12-20 07:57:12

标签: clojure

我正在尝试找一个散列字符串的好方法。 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?

1 个答案:

答案 0 :(得分:2)

你的MD5操作是正确的;你没有正确地展示它们。

由于MD5长度为32个十六进制字符,因此您需要格式化字符串以将其正确填充。

换句话说,只需更改此表达式:

(.toString (new java.math.BigInteger 1 (.digest hashed)) base))

使用format

(format "%032x" (new java.math.BigInteger 1 (.digest hashed)))))