Last active
December 14, 2015 10:48
-
-
Save franks42/5074268 to your computer and use it in GitHub Desktop.
Clojure repl-session to show usage of secure hash or message digest operations like SHA-1 and MD5 with the clj.security.message-digest library.
See "https://github.com/franks42/clj.security.message-digest"
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
user=> (require '(clj.security [message-digest :as md])) | |
nil | |
user=> (def my-sha1-digest-0 (md/make-message-digest :sha-1 :utf-8)) ;; create a message digest object | |
#'user/my-sha1-digest-0 | |
user=> my-sha1-digest-0 | |
#<TMessageDigest clj.security.message_digest.TMessageDigest@66da7ad5> | |
user=> (md/digest my-sha1-digest-0) ;; sha-1 digest of an empty string - initial accumulator digest | |
#<byte[] [B@1cefd3c> | |
user=> (md/bytes2hex (md/digest my-sha1-digest-0)) ;; bytes are somewhat easier to "read" in hex | |
"DA39A3EE5E6B4B0D3255BFEF95601890AFD80709" | |
user=> (def my-sha1-digest-abc (md/update my-sha1-digest-0 "abc")) ;; update accumulator with digest of "abc" as utf-8 charset | |
#'user/my-sha1-digest-abc | |
user=> (md/bytes2hex (md/digest my-sha1-digest-abc)) ;; sha-1 digest value of "abc" | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (md/digest (md/update my-sha1-digest-0 "abc"))) ;; md/update passes updated accumulator thru | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (md/digest (md/update (md/update my-sha1-digest-0 "a") "bc"))) ;; chaining multiple updates and digest | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (md/digest (md/update (md/update my-sha1-digest-0 "a") "b") "c")) ;; md/digest can also digest bytes/text | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (md/digest my-sha1-digest-0 "abc")) ;; don't need update when all can be passed in one go to digest | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (md/digest :sha-1 :utf-8 "abc")) ;; initial digest-message object gets transparently created | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (md/digest "abc")) ;; sha-1 and utf-8 are defaults | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (binding [md/*default-digest-algorithm* :SHA-1](md/digest "abc"))) ;; binding defaults is alternative | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (binding [md/*default-digest-algorithm* :MD5](md/digest "abc"))) ;; algo bound to md5 | |
"900150983CD24FB0D6963F7D28E17F72" | |
user=> (md/bytes2hex (binding [md/*default-digest-algorithm* :MD5](md/digest :sha-256 "abc"))) ;; default is explicitly overwritten | |
"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD" | |
user=> (md/bytes2hex (binding [md/*default-charset* :UTF-8](md/digest :sha-256 "abc"))) ;; set default for charset encoding | |
"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD" | |
user=> (md/bytes2hex (binding [md/*default-charset* :UTF-16](md/digest :sha-256 "abc"))) ;; different charset gives different result | |
"2565AE43A9E12333FF5A9B4D38AFA39990F3FB63530EF0F616FC542471920405" | |
user=> (md/bytes2hex (binding [md/*default-charset* :UTF-16](md/digest :sha-256 :utf8 "abc"))) ;; again default explicitly overwritten | |
"BA7816BF8F01CFEA414140DE5DAE2223B00361A396177A9CB410FF61F20015AD" | |
user=> (md/bytes2hex (md/digest (my-sha1-digest-0 "abc"))) ;; message-digest object as function: updater | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex ((my-sha1-digest-0 "abc"))) ;; message-digest object first updater then without argument: digester | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (my-sha1-digest-0)) ;; digester of initial sha-1 accumulator | |
"DA39A3EE5E6B4B0D3255BFEF95601890AFD80709" | |
user=> (md/bytes2hex ((md/make-message-digest))) ;; just checking... | |
"DA39A3EE5E6B4B0D3255BFEF95601890AFD80709" | |
user=> (md/bytes2hex ((md/make-message-digest :md5))) ;; digester of initial md5 accumulator | |
"D41D8CD98F00B204E9800998ECF8427E" | |
user=> (md/bytes2hex (((md/make-message-digest :md5) "abc"))) ;; md5 digester of "abc" | |
"900150983CD24FB0D6963F7D28E17F72" | |
user=> (md/bytes2hex (((md/make-message-digest :sha1) "abc"))) ;; sha-1 digester of "abc" | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (md/digest :sha1 "abc")) ;; back to where we started | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (md/digest :sha1 (.getBytes "abc" :UTF-8))) ;; accepts strings as well as bytes | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (md/digest :sha1 (.getBytes "abc" :UTF-16))) ;; different charset, different bytes | |
"216B288437984E5219858A80F511094CCD1A9681" | |
user=> (md/bytes2hex (md/digest :sha1 (.getBytes "a" :UTF-8) \b (byte 99))) ;; bytes, char and byte | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (md/digest :sha1 :utf8 "a" \b (byte 99))) ;; string, char and byte | |
"A9993E364706816ABA3E25717850C26C9CD0D89D" | |
user=> (md/bytes2hex (apply md/digest :sha1 (repeat 1000000 "a"))) ;; lazy digest of a million "a"s | |
"34AA973CD4C4DAA4F61EEB2BDBAD27316534016F" | |
user=> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment