Encryption clojure有AES图书馆吗?
clojure是否有AES加密库?我应该使用maven或clojars提供的java库吗?感谢您的时间和考虑。Java的AES实现经过了良好的测试,并包含在JDK中……任何Clojure库都可能使用该impl本身Encryption clojure有AES图书馆吗?,encryption,clojure,Encryption,Clojure,clojure是否有AES加密库?我应该使用maven或clojars提供的java库吗?感谢您的时间和考虑。Java的AES实现经过了良好的测试,并包含在JDK中……任何Clojure库都可能使用该impl本身 有关JavaAPI的详细讨论,请参阅。另外,还有一个使用Clojure的API的示例(尽管那里的代码不完全是惯用的)。下面是一个使用可用java加密库的可能更惯用的示例encrypt和decrypt在这里,它们都只需将输入文本和加密密钥作为字符串 (import (javax.cryp
有关JavaAPI的详细讨论,请参阅。另外,还有一个使用Clojure的API的示例(尽管那里的代码不完全是惯用的)。下面是一个使用可用java加密库的可能更惯用的示例
encrypt
和decrypt
在这里,它们都只需将输入文本和加密密钥作为字符串
(import (javax.crypto Cipher KeyGenerator SecretKey)
(javax.crypto.spec SecretKeySpec)
(java.security SecureRandom)
(org.apache.commons.codec.binary Base64))
(defn bytes [s]
(.getBytes s "UTF-8"))
(defn base64 [b]
(Base64/encodeBase64String b))
(defn debase64 [s]
(Base64/decodeBase64 (bytes s)))
(defn get-raw-key [seed]
(let [keygen (KeyGenerator/getInstance "AES")
sr (SecureRandom/getInstance "SHA1PRNG")]
(.setSeed sr (bytes seed))
(.init keygen 128 sr)
(.. keygen generateKey getEncoded)))
(defn get-cipher [mode seed]
(let [key-spec (SecretKeySpec. (get-raw-key seed) "AES")
cipher (Cipher/getInstance "AES")]
(.init cipher mode key-spec)
cipher))
(defn encrypt [text key]
(let [bytes (bytes text)
cipher (get-cipher Cipher/ENCRYPT_MODE key)]
(base64 (.doFinal cipher bytes))))
(defn decrypt [text key]
(let [cipher (get-cipher Cipher/DECRYPT_MODE key)]
(String. (.doFinal cipher (debase64 text)))))
用法如下:
(def key "secret key")
(def encrypted (encrypt "My Secret" key)) ;; => "YsuYVJK+Q6E36WjNBeZZdg=="
(decrypt encrypted key) ;; => "My Secret"
是一个伟大的图书馆,它将Clojure包装在。Google Tink支持使用流式或确定性加密/解密的所有形式。AES受AeadKeyTemplates.AES128GCM支持
它还提供MAC和数字签名,非常值得查看和参与
例如:
(:require [tinklj.keys.keyset-handle :as keyset-handles])
(keyset-handles/generate-new :aes128-gcm)
(:require [tinklj.encryption.aead :refer [encrypt decrypt])
(encrypt aead (.getBytes data-to-encrypt) aad)
(decrypt aead encrypted aad)
有人把这个包装成