是否有clojure的AES加密庫?我應該使用通過maven或clojars提供的java libray嗎?感謝您的時間和考慮。有clojure的AES庫嗎?
9
A
回答
19
下面是使用可用的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)))))
二手suchwise:
(def key "secret key")
(def encrypted (encrypt "My Secret" key)) ;; => "YsuYVJK+Q6E36WjNBeZZdg=="
(decrypt encrypted key) ;; => "My Secret"
7
Java的AES實現經過了充分測試,幷包含在JDK中...任何Clojure庫都可能使用該impl本身。
請參閱Java 256-bit AES Password-Based Encryption以瞭解關於Java API的體面討論。此外,http://jyliao.blogspot.com/2010/08/exploring-java-aes-encryption-algorithm.html有一個使用Clojure API的示例(儘管代碼不完全是慣用的)。
相關問題
- 1. 在數據庫中存儲AES CipherText的AES IV安全嗎?
- 2. Clojure等價於Python的lxml庫嗎?
- 3. Clojure有短路邏輯嗎?
- 4. Clojure有變量引用嗎?
- 5. Clojure有像Mathematica's%這樣的功能嗎?
- 6. 在Clojure中有更好的方法嗎?
- 7. Clojure的異徑庫 - 有最大
- 8. Clojure OAuth庫
- 9. 實現Clojure庫
- 10. 這是慣用的Clojure嗎?
- 11. Clojure庫遞歸沒有循環... recur
- 12. AES庫或C++代碼
- 13. AES庫與openssl兼容
- 14. Clojure源代碼庫
- 15. clojure庫函數的大O
- 16. 在ubuntu/linux/unix中有cesc加密的aes 256嗎?
- 17. AES中的CBC和CFB模式有區別嗎?
- 18. clojure是「多線程」嗎?
- 19. 我們需要clojure 1.4中的clojure-contrib.jar嗎?
- 20. 密碼加密/數據庫層AES或應用層AES
- 21. 如何在AES數據庫中存儲AES加密密碼
- 22. 用於VB.NET的AES加密標準庫?
- 23. 是否有一個支持AES的純Erlang密碼庫?
- 24. Clojure的if-let有Java的等價物嗎?
- 25. Clojure中的匿名函數的fn和#語法有區別嗎?
- 26. 可用的補充clojure-xml /解析的Clojure XML解析庫
- 27. Clojure沒有!=?
- 28. BCrypt使用AES 448bit加密嗎?
- 29. AES可以用於網站安全嗎?
- 30. 所有的clojure代碼都在java代理中工作嗎?
有人打包這件事作爲https://github.com/clavoie/lock-key/blob/master/src/lock_key/core.clj – 2014-04-22 22:25:42