Hash algorithms (digest)
All hash algorithms are located in the buddy.core.hash
namespace.
Available hash algorithms:
Hash algorithm name | Digest size |
---|---|
SHA1 | 160 |
SHA2 | 256, 384, 512 |
SHA3 | 256, 384, 512 |
MD5 | 128 |
Tiger | 192 |
BLAKE2b | 128, 256, 512 |
BLAKE3 | 256, arbitrary size |
Skein | 256, 512, 1024, arbitrary size |
Whirlpool | 512 |
RIPEMD128 | 128 |
RIPEMD160 | 160 |
RIPEMD256 | 256 |
RIPEMD320 | 320 |
Basic usage
Import namespace example:
(require '[buddy.core.hash :as hash])
(require '[buddy.core.codecs :refer :all])
Usage examples:
(hash/sha256 "foo bar")
;; -> #<byte[] [B@162a657e>
(-> (hash/sha256 "foo bar")
(bytes->hex))
;; -> "fbc1a9f858ea9e177916964bd88c3d37b91a1e84412765e29950777f265c4b75"
Advanced usage
Hash functions are implemented using protocols and can be extended to other types. The default implementations come with support for file-like objects (File, URL, URI* and InputStream).
Make hash of file example:
;; Additional import for easy open files
(require '[clojure.java.io :as io])
(-> (hash/sha256 (io/input-stream "/tmp/some-file"))
(bytes->hex))
;; -> "bba878639499c8449f69efbfc699413eebfaf41d4b7a7faa560bfaf7e93a43dd"
You can extend it for your own types using the buddy.core.hash/IDigest protocol:
(defprotocol Digest
(-digest [data engine]))
NOTE: Functions like sha256 are aliases for the more generic function digest.