2010-09-10 13 views
29

मैं एन्क्रिप्शन के लिए Jasypt का उपयोग कर रहा हूँ। यह मेरा कोड है:यह पता लगाने के लिए कि मेरे जेवीएम द्वारा क्या एल्गोरिदम [एन्क्रिप्शन] समर्थित है?

public class Encryptor {  
    private final static StandardPBEStringEncryptor pbeEncryptor = new StandardPBEStringEncryptor(); 
    private final static String PASSWORD = "FBL"; 
    private final static String ALGORITHM = "PBEWithMD5AndTripleDES"; 

    static{ 
     pbeEncryptor.setPassword(PASSWORD); 
     //pbeEncryptor.setAlgorithm(ALGORITHM);  
    } 

    public static String getEncryptedValue(String text){ 
     return pbeEncryptor.encrypt(text); 
    } 

    public static String getDecryptedValue(String text){ 
     return pbeEncryptor.decrypt(text); 
    } 

} 

टिप्पणी हटाएं setAlgorithm लाइन और यह एक अपवाद

org.jasypt.exceptions.EncryptionOperationNotPossibleException फेंक देगा: एन्क्रिप्शन में एक अपवाद tion उठाया। एक संभावित कारण आप मजबूत एन्क्रिप्शन एल्गोरिदम का उपयोग कर रहे है और आप जावा क्रिप्टोग्राफी पूर्व तनाव (JCE) असीमित शक्ति इस जावा वर्चुअल मशीन

एपीआई का कहना है में क्षेत्राधिकार नीति फ़ाइलें नहीं स्थापित:

सेट एल्गोरिथ्म के लिए एन्क्रिप्शन एल्गोरिथ्म सेट किया जा , एन्क्रिप्शन के लिए इस्तेमाल करने के लिए PBEWithMD5AndDES की तरह इस्तेमाल किया जा रहा।

इस एल्गोरिथ्म अपने JCE प्रदाता द्वारा समर्थित होने के लिए, आप भी के लिए मोड और गद्दी निर्दिष्ट कर सकते हैं अगर यह समर्थित है और, (यदि आप एक है, या डिफ़ॉल्ट JVM प्रदाता यदि आप नहीं उल्लेख करें) है इसे एल्गोरिथ्म/मोड/पैडिंग की तरह।

देखें: http://www.jasypt.org/api/jasypt/apidocs/org/jasypt/encryption/pbe/StandardPBEStringEncryptor.html#setAlgorithm%28java.lang.String%29

अब, जब आप 'setAlgorithm' टिप्पणी यह ​​डिफ़ॉल्ट एल्गोरिथ्म [मैं लगता है कि यह md5 है] का उपयोग करेगा, और यह ठीक काम करेंगे। इसका मतलब है कि एमडी 5 मेरे जेवीएम द्वारा समर्थित है। अब, यह पता लगाने के लिए कि मेरे जेवीएम द्वारा अन्य एन्क्रिप्शन एल्गोरिदम समर्थित हैं।

धन्यवाद,

उत्तर

36

निम्नलिखित सभी प्रदाताओं और एल्गोरिदम समर्थक सूची जाएगा। जावा का आप किस संस्करण का उपयोग कर रहे हैं? जब तक कि आप पुराने संस्करण पर नहीं हैं, जेसीई मानक के रूप में शामिल किया जाना चाहिए।

import java.security.Provider; 
import java.security.Security; 

public class SecurityListings { 
    public static void main(String[] args) { 
     for (Provider provider : Security.getProviders()) { 
      System.out.println("Provider: " + provider.getName()); 
      for (Provider.Service service : provider.getServices()) { 
       System.out.println(" Algorithm: " + service.getAlgorithm()); 
      } 
     } 

    } 
} 

संपादित करें: किसी भी कारण है कि आप javax.crypto पैकेज से मानक सामान का उपयोग नहीं करते?

1) का उपयोग कर

Key key = SecretKeyFactory.getInstance(algorithm).generateSecret(new PBEKeySpec(password.toCharArray())); 

2) एक Cipher बनाएं का उपयोग कर

cipher = Cipher.getInstance(algorithm); 

3) कुंजी

cipher.init(Cipher.ENCRYPT_MODE, key); 

4) के साथ अपने सिफर init एनक्रिप्टिंग करो उत्पन्न एक Key

के साथ
byte[] encrypted = cipher.doFinal(data) 
+0

मैं इसके बजाय JDK 1.6 –

+4

उपयोग कर रहा हूँ ("एल्गोरिथ्म:" + service.getAlgorithm()); System.out.println ("" + सेवा) का उपयोग करें; और आप उपलब्ध एन्क्रिप्शन के स्तर को देखने में सक्षम होंगे। उदाहरण के लिए, निम्नलिखित इंगित करता है कि 128 बिट एईएस एन्क्रिप्शन समर्थित है, लेकिन 256 बिट एईएस नहीं: सनजेसीई: सिफर.एईएस -> com.sun.crypto.provider.AESCipher ... समर्थित मोड = ईसीबी | सीबीसी | पीसीबीसी | सीटीआर | सीटीएस | CFB | ओएफबी | CFB8 | CFB16 | CFB24 | CFB32 | CFB40 | CFB48 | CFB56 | CFB64 | OFB8 | OFB16 | OFB24 | OFB32 | OFB40 | OFB48 | OFB56 | OFB64 | CFB72 | CFB80 | CFB88 | CFB96 | CFB104 | CFB112 | सीएफबी 120 | सीएफबी 128 | OFB72 | OFB80 | OFB88 | OFB96 | OFB104 | OFB112 | OFB120 | OFB128} –

+0

कोड बहुत सारे एल्गोरिदम सूचीबद्ध करता है जिनका उपयोग नहीं किया जा सकता है। इतना उपयोगी कोड नहीं है। – Jonas

2

यह पहले से इंस्टॉल आप की जरूरत नहीं है, तो आप JCE (जावा क्रिप्टोग्राफी एक्सटेंशन) जो एल्गोरिदम के लिए सहायता प्रदान करता है स्थापित करने के लिए की जरूरत है।

आप यहाँ स्थापित करने के लिए कैसे देख सकते हैं:

http://download.oracle.com/javase/1.4.2/docs/guide/security/CryptoSpec.html#ProviderInstalling

पुस्तकालय यहां पाया जा सकता: http://www.oracle.com/technetwork/java/javase/tech/index-jsp-136007.html

1

क्वर्वकी द्वारा अभी भी एक 'लंबित' प्रश्न पूछा गया है: javax.crypto का उपयोग करने के बजाय Jasypt का उपयोग क्यों करें?

ठीक है, मैं जसीप्ट का उपयोग करने की अनुशंसा करता हूं क्योंकि यह शुरुआती उपयोगकर्ताओं के लिए क्रिप्टो का एक आसान तरीका है और अनुभवी उपयोगकर्ताओं के लिए अत्यधिक विन्यास योग्य है।

जैसीप्ट के साथ, आप जेसीईसी और क्रिप्टोग्राफी के थोड़े ज्ञान के साथ जल्दी से javax.crypto का लाभ लेना शुरू कर सकते हैं। चाहे आप उपयोगकर्ता पासवर्ड प्रबंधित करना चाहते हैं या डेटा एन्क्रिप्ट/डिक्रिप्ट करना चाहते हैं, ढांचा प्रश्न के लिए एक सरल अमूर्त प्रदान करता है।

उसी समय, ढांचा अनुभवी उपयोगकर्ताओं को पूर्ण नियंत्रण में रहने की अनुमति देने के लिए जेसीई विनिर्देश की सभी संभावनाओं को उजागर करता है।

इस के अलावा, Jasypt आउट-ऑफ-द-बॉक्स प्रसिद्ध प्रश्नों के लिए कई और अधिक सुविधाएँ प्रदान (, डेटाबेस में संग्रहीत संवेदनशील डेटा के साथ काम कर ...)

+0

अगर वह एक प्रश्न पूछना चाहता है तो उसे इसे जवाब में नहीं रखना चाहिए। यह एक चर्चा धागा नहीं है – Mick

4

Jasypt कमांड लाइन टूल अब आता है इसे लिनक्स के लिए listAlgorithms.bat और listAlgorithms.sh नामक करने के लिए एक स्क्रिप्ट के साथ।

आप कैसे डाउनलोड करने और इसे यहाँ का उपयोग करने पर निर्देश प्राप्त कर सकते हैं: http://www.jasypt.org/cli.html#Listing_algorithms

2

मैं कोड @Qwerky द्वारा पोस्ट की कोशिश की, लेकिन यह बहुत उपयोगी नहीं है। मैंने नवीनतम बाउंसीकास्टल प्रदाता जोड़ा था, और मुझे मिलने वाले परिणाम बहुत भ्रमित थे। यह बेहतर विवरण में दिखाता है कि प्रदाता, संस्करण, और एल्गोरिदम प्रकार और नाम कौन है। System.out.println:

for (Provider provider : Security.getProviders()) { 
    System.out.println("Provider: " + provider.getName() + " version: " + provider.getVersion()); 
    for (Provider.Service service : provider.getServices()) { 
     System.out.printf(" Type : %-30s Algorithm: %-30s\n", service.getType(), service.getAlgorithm()); 
    } 
} 
संबंधित मुद्दे