MD 5哈希值因技术而异

  • 本文关键字:技术 哈希值 MD clojure
  • 更新时间 :
  • 英文 :


我正试图找到一种散列字符串的好方法。这种方法运行良好,但结果与本网站不一致:

(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?

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

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

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

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

到使用format:的

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

最新更新