Created
April 4, 2014 16:54
This file contains hidden or 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
(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