Skip to content

Instantly share code, notes, and snippets.

@piranha
Last active March 11, 2020 12:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save piranha/ffc8149ce86ae934134270cca306c18d to your computer and use it in GitHub Desktop.
Save piranha/ffc8149ce86ae934134270cca306c18d to your computer and use it in GitHub Desktop.
Simple encryption/decryption in Clojure
(ns encrypt
(:import [javax.crypto Cipher]
[javax.crypto.spec SecretKeySpec]
[java.security MessageDigest]
[java.util Base64 Base64$Encoder Base64$Decoder]))
(def SECRET (or (System/getenv "SECRET")
(binding [*out* *err*]
(print "\nWARNING: set 'SECRET' env variable to be secure\n\n")
"epic-secret")))
(def ^SecretKeySpec KEY
(let [sha (MessageDigest/getInstance "SHA-1")
ba (->> (.digest sha (.getBytes SECRET "UTF-8"))
(take 16)
byte-array)]
(SecretKeySpec. ba "AES")))
(def ^Base64$Encoder b64-encoder (.withoutPadding
(Base64/getUrlEncoder)))
(def ^Base64$Decoder b64-decoder (Base64/getUrlDecoder))
(def ^Cipher encrypter (doto (Cipher/getInstance "AES")
(.init Cipher/ENCRYPT_MODE KEY)))
(def ^Cipher decrypter (doto (Cipher/getInstance "AES")
(.init Cipher/DECRYPT_MODE KEY)))
(defn encrypt [s]
(->> (.doFinal encrypter (.getBytes s "UTF-8"))
(.encodeToString b64-encoder)))
(defn -decrypt [^String s]
(String.
(->> (.decode b64-decoder s)
(.doFinal decrypter))
"UTF-8"))
(defn decrypt [s]
(try
(-decrypt s)
(catch Exception e
nil)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment