2012-04-19 14 views
9

क्या क्लोजर के लिए एईएस एन्क्रिप्शन लाइब्रेरी है? क्या मुझे मैवेन या क्लोजर्स के माध्यम से एक जावा लाइब्र्रे का उपयोग करना चाहिए? आपके समय और विचार के लिए धन्यवाद।क्या क्लोजर के लिए एईएस लाइब्रेरी है?

उत्तर

19

उपलब्ध जावा क्रिप्टो पुस्तकालयों का उपयोग करके शायद एक और अधिक मूर्ख उदाहरण है। 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" 
+1

का कोई व्यक्ति इस पैक https://github.com/clavoie/lock-key/blob/master/src/lock_key/core.clj के रूप में –

7

जावा का एईएस कार्यान्वयन अच्छी तरह से परीक्षण किया गया है और जेडीके में शामिल है ... किसी भी क्लोजर लाइब्रेरी की संभावना है कि वह स्वयं को लागू करे।

जावा एपीआई की सभ्य चर्चा के लिए Java 256-bit AES Password-Based Encryption देखें। इसके अलावा, http://jyliao.blogspot.com/2010/08/exploring-java-aes-encryption-algorithm.html में क्लोजर से एपीआई का उपयोग करने का एक उदाहरण है (हालांकि कोड पूरी तरह से मूर्ख नहीं है)।

संबंधित मुद्दे