Có thư viện mã hóa AES cho clojure không? sao tôi nên sử dụng một libray java có sẵn thông qua maven hoặc clojars? Cảm ơn bạn đã dành thời gian và cân nhắc.Có thư viện AES cho clojure không?
9
A
Trả lời
19
Dưới đây là một ví dụ có lẽ thành ngữ hơn khi sử dụng các thư viện mã hóa java có sẵn. encrypt
và decrypt
ở đây, mỗi văn bản nhập văn bản đầu vào và khóa mã hóa, cả hai đều là Chuỗi.
(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)))))
đã qua sử dụng suchwise:
(def key "secret key")
(def encrypted (encrypt "My Secret" key)) ;; => "YsuYVJK+Q6E36WjNBeZZdg=="
(decrypt encrypted key) ;; => "My Secret"
7
Việc triển khai AES của Java được kiểm tra kỹ và bao gồm trong JDK… bất kỳ thư viện Clojure nào cũng có khả năng sử dụng chính nó.
Xem Java 256-bit AES Password-Based Encryption để có thảo luận tốt về API Java. Ngoài ra, http://jyliao.blogspot.com/2010/08/exploring-java-aes-encryption-algorithm.html có một ví dụ về cách sử dụng API từ Clojure (mặc dù mã không hoàn toàn thành ngữ).
Các vấn đề liên quan
- 1. Tài liệu về Clojure cho thư viện/không gian tên
- 2. Thư viện phân loại clojure hoặc Scheme?
- 3. Có thư viện Calculus cho JavaScript không?
- 4. Có thư viện hashmap cho JavaScript không?
- 5. Có thư viện Java cho steganography không?
- 6. CMake Error: TARGETS không có THƯ VIỆN THƯ VIỆN cho mục tiêu thư viện được chia sẻ
- 7. Big O của chức năng thư viện clojure
- 8. Thư viện và hướng dẫn về trang web Clojure
- 9. Có thư viện UPnP cho .NET (C# hoặc VB.NET) không?
- 10. Có kho lưu trữ thư viện nào cho C không?
- 11. Có thư viện/khung công tác nào cho SCON không?
- 12. Có thư viện máy khách MS-DRM cho Linux không?
- 13. Có thư viện số nhiều chuỗi tốt cho actionscript không?
- 14. Có sự kiện OnLoad cho thư viện C# không?
- 15. Có đáng để tạo thư viện tĩnh cho iOS không?
- 16. Có thư viện Lập trình chức năng cho .NET không?
- 17. Có thư viện máy khách CalDAV cho Java không?
- 18. Có thư viện sơ đồ tốt cho Python không?
- 19. Có thư viện OCR miễn phí nào cho Android không?
- 20. Có thư viện biểu đồ tốt cho Android không?
- 21. Có ai đã viết thư viện Android cho Pusher không?
- 22. Có thư viện độc lập cho Firefox Sync không?
- 23. Có thư viện ngày BCE/CE cho JavaScript không?
- 24. Có thư viện yaml tốt cho Android không?
- 25. Có thư viện xây dựng Sql động cho .Net không?
- 26. Có thư viện OAuth hoạt động cho Python 3 không?
- 27. Thư viện Crypto đơn giản cho iOS
- 28. Có thư viện .net có lớp Vector không thay đổi liên tục (như được tìm thấy trong Clojure/Scala) không?
- 29. Thư viện mật mã cho C++
- 30. Đề xuất cho thư viện .NET giá rẻ/miễn phí để thực hiện Zip với mã hóa AES?
người đóng gói này lên như https://github.com/clavoie/lock-key/blob/master/src/lock_key/core.clj –