Skip to content

Instantly share code, notes, and snippets.

@joelash
Created April 4, 2014 16:54
Show Gist options
  • Save joelash/9978627 to your computer and use it in GitHub Desktop.
Save joelash/9978627 to your computer and use it in GitHub Desktop.
(ns cowboy
(:import [javax.crypto Cipher SecretKey SecretKeyFactory]
[javax.crypto.spec DESedeKeySpec IvParameterSpec]
[org.apache.commons.codec.binary Base64 Hex]))
(def algo "DESede")
(def transformation "DESede/CBC/PKCS5Padding")
(defn bytes [s]
(.getBytes s "UTF-8"))
(defn debase64 [s]
(Base64/decodeBase64 (bytes s)))
(defn base64 [b]
(Base64/encodeBase64String b))
(defn key-spec [shared-key]
(-> shared-key
debase64
DESedeKeySpec.))
(def iv (IvParameterSpec. (byte-array 8)))
(defn secret-key [shared-key]
(.generateSecret
(SecretKeyFactory/getInstance algo)
(key-spec shared-key)))
(defn encrypter [shared-key]
(doto (Cipher/getInstance transformation)
(.init Cipher/ENCRYPT_MODE (secret-key shared-key) iv)))
(defn encrypt [string shared-key]
(let [encrypter (encrypter shared-key)
input (.getBytes string "UTF-8")]
(->> input
(.doFinal encrypter)
base64)))
(defn decrypter [shared-key]
(doto (Cipher/getInstance transformation)
(.init Cipher/DECRYPT_MODE (secret-key shared-key) iv)))
(defn decrypt [encrypted-string shared-key]
(let [bytes (debase64 encrypted-string)
decrypter (decrypter shared-key)]
(String. (.doFinal decrypter bytes) "UTF-8")))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment