¿Hay una biblioteca de cifrado AES para clojure? ¿Debo usar una biblioteca de Java disponible a través de maven o clojars? Gracias por su tiempo y consideración.¿Hay una biblioteca AES para clojure?
9
A
Respuesta
19
Aquí hay un ejemplo quizás más idiomático utilizando las bibliotecas de cifrado java disponibles. encrypt
y decrypt
aquí cada uno simplemente toma el texto de entrada y la clave de cifrado, ambos como cadenas.
(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 usada:
(def key "secret key")
(def encrypted (encrypt "My Secret" key)) ;; => "YsuYVJK+Q6E36WjNBeZZdg=="
(decrypt encrypted key) ;; => "My Secret"
7
La implementación AES de Java está bien probada e incluida en el JDK ... cualquier biblioteca Clojure probablemente usaría esa impl.
Consulte Java 256-bit AES Password-Based Encryption para obtener una discusión decente de la API de Java. Además, http://jyliao.blogspot.com/2010/08/exploring-java-aes-encryption-algorithm.html tiene un ejemplo del uso de la API de Clojure (aunque el código no es del todo idiomático).
Cuestiones relacionadas
- 1. ¿Hay un REPL de color para Clojure?
- 2. Una biblioteca amigable con clojure para reproducir sonidos
- 3. ¿Hay una biblioteca Telnet para JavaScript?
- 4. ¿Hay una biblioteca de estadísticas para PHP?
- 5. ¿Hay una biblioteca YAML nativa para iPhone?
- 6. ¿Hay una biblioteca LINQ para C++?
- 7. ¿Hay una biblioteca de Cálculo para JavaScript?
- 8. ¿Hay una biblioteca de MapReduce para Delphi?
- 9. ¿Hay una biblioteca AJAX para Codeigniter
- 10. ¿Hay una buena biblioteca yaml para Android?
- 11. ¿Hay una biblioteca Java para esteganografía?
- 12. ¿Hay una biblioteca de hashmap para JavaScript?
- 13. Sugerencias para una biblioteca .NET barata/gratuita para hacer Zip con encriptación AES?
- 14. C# Bibliotecas para encriptar/descifrar usando AES
- 15. ¿Existe una biblioteca de criptografía Erlang pura con soporte para AES?
- 16. ¿Hay una biblioteca .NET FastCGI?
- 17. ¿Hay una biblioteca GZIP J2ME?
- 18. ¿Hay alguna DSL Clojure?
- 19. Una buena alternativa a GWT para Clojure
- 20. biblioteca de clojure para autentificación SPNEGO/Kerberos-http
- 21. Encriptación AES para un NSString?
- 22. ¿Hay algún Principio de Clojure?
- 23. no se puede cargar una nueva biblioteca de clojure
- 24. ¿Hay una biblioteca para comparar valores de tipo primitivo?
- 25. ¿Hay una biblioteca para mostrar un Virtual Human [WPF]
- 26. ¿Hay una biblioteca de JavaScript para crear gráficos?
- 27. ¿Hay una biblioteca de matemáticas decimal para JavaScript?
- 28. ¿Hay una biblioteca para hacer CSS spriting automáticamente?
- 29. ¿Hay una biblioteca de Python para generar archivos .ico?
- 30. ¿Hay una biblioteca javascript JSON binaria disponible para navegadores?
Alguien empaquetado esto como https://github.com/clavoie/lock-key/blob/master/src/lock_key/core.clj –