ryoakg
9/24/2016 - 2:44 AM

message-digest.clj

(defmacro bytes->hex-string [x]
  `(javax.xml.bind.DatatypeConverter/printHexBinary ~x))

(defn- message-digest [algorithm ^String msg]
  (-> (doto (java.security.MessageDigest/getInstance algorithm)
        .reset
        (.update (.getBytes msg)))
      .digest
      bytes->hex-string))

(def ^{:arglists '([^String msg])} md5
  #(message-digest "md5" %))

(def ^{:arglists '([^String msg])} sha1
  #(message-digest "sha1" %))

(def ^{:arglists '([^String msg])} sha256
  #(message-digest "sha-256" %))

;;; usage
(require '[clojure.string :as str])

(map #(str/lower-case (% "abc")) [md5 sha1 sha256])
(comment
  ("900150983cd24fb0d6963f7d28e17f72"
   "a9993e364706816aba3e25717850c26c9cd0d89d"
   "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad")
  )