जावा सुरक्षा: अवैध कुंजी आकार या डिफ़ॉल्ट पैरामीटर?


409

मैंने पहले इस बारे में एक प्रश्न पूछा था, लेकिन इसका उत्तर सही नहीं मिला और कहीं नहीं गया।

इसलिए मैंने समस्या पर कुछ विवरण स्पष्ट किए हैं और मैं वास्तव में आपके विचारों को सुनना चाहूंगा कि मैं इसे कैसे ठीक कर सकता हूं या मुझे क्या प्रयास करना चाहिए।

मेरे पास मेरे लिनक्स सर्वर पर जावा 1.6.0.12 स्थापित है और नीचे का कोड पूरी तरह से चलता है।

String key = "av45k1pfb024xa3bl359vsb4esortvks74sksr5oy4s5serondry84jsrryuhsr5ys49y5seri5shrdliheuirdygliurguiy5ru";
try {
    Cipher c = Cipher.getInstance("ARCFOUR");

    SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "ARCFOUR");
    c.init(Cipher.DECRYPT_MODE, secretKeySpec);

    return new String(c.doFinal(Hex.decodeHex(data.toCharArray())), "UTF-8");

} catch (InvalidKeyException e) {
    throw new CryptoException(e);
}

आज मैंने अपने सर्वर उपयोगकर्ता पर जावा 1.6.0.26 स्थापित किया है और जब मैं अपना एप्लिकेशन चलाने का प्रयास करता हूं, तो मुझे निम्न अपवाद मिलते हैं। मेरा अनुमान है कि यह जावा इंस्टॉलेशन कॉन्फ़िगरेशन के साथ कुछ करना है क्योंकि यह पहले एक में काम करता है, लेकिन बाद के संस्करण में काम नहीं करता है।

Caused by: java.security.InvalidKeyException: Illegal key size or default parameters
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.a(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at javax.crypto.Cipher.init(DashoA13*..) ~[na:1.6]
    at my.package.Something.decode(RC4Decoder.java:25) ~[my.package.jar:na]
    ... 5 common frames omitted

लाइन 25 है: c.init(Cipher.DECRYPT_MODE, secretKeySpec);

नोट:
* java.security सर्वर के 1.6.0.12 जावा निर्देशिका पर लगभग पूरी तरह से 1.6.0.26 java.security फ़ाइल के साथ मेल खाता है । पहले एक में कोई अतिरिक्त प्रदाता नहीं हैं।
* पिछला प्रश्न यहाँ है



4
यह भी त्रुटि के रूप में फेंका जा सकता है: Caused by: java.security.InvalidKeyException: Illegal key size(जावा में या "डिफ़ॉल्ट मापदंडों के बिना") 8
hackajar

बस OpenJDK का उपयोग करें और यह काम करेगा।
रोड्रिगो असेंसियो

@RodrigoAsensio: मैं OpenJDK का उपयोग कर रहा हूं और यह इसके साथ काम नहीं करता है। आपको अनलिमिटेड स्ट्रेंथ ज्यूरिसेशन पॉलिसी फाइल्स जार फाइल्स को इनस्टॉल करना होगा। और फिर यह काम करेगा।
अंजन जूल 25'17

5
@AniketThakur उत्तर पर अपडेट करें। चूंकि जावा 9 और जावा 8u151 को अब अधिकार क्षेत्र नीति फ़ाइलों को डाउनलोड और मैन्युअल रूप से स्थापित करने की कोई आवश्यकता नहीं है। असीमित क्रिप्टोग्राफी को सक्षम करने के लिए, कोई नया crypto.policy सुरक्षा गुण का उपयोग कर सकता है। यदि java.security फ़ाइल में नई सुरक्षा गुण (crypto.policy) सेट की गई है, या JCE फ्रेमवर्क प्रारंभ होने से पहले Security.setProperty () कॉल का उपयोग करके गतिशील रूप से सेट किया गया है, तो उस सेटिंग को सम्मानित किया जाएगा। डिफ़ॉल्ट रूप से, संपत्ति अपरिभाषित होगी।
मार्सिन क्लोपोटेक

जवाबों:


722

सबसे अधिक संभावना है कि आपके पास अब असीमित शक्ति फ़ाइल स्थापित नहीं है।

आपको इस फ़ाइल को डाउनलोड करने की आवश्यकता हो सकती है:

जावा क्रिप्टोग्राफी एक्सटेंशन (जेसीई) असीमित शक्ति क्षेत्राधिकार नीति फ़ाइलें 6

जावा क्रिप्टोग्राफी एक्सटेंशन (जेसीई) असीमित शक्ति क्षेत्राधिकार नीति फ़ाइलें 7 डाउनलोड

जावा क्रिप्टोग्राफी एक्सटेंशन (JCE) असीमित शक्ति क्षेत्राधिकार नीति फ़ाइलें 8 डाउनलोड (केवल जावा 8 u162 से पहले संस्करणों के लिए आवश्यक)

ज़िप फ़ाइलों को ज़िप से निकालें और उन्हें अंदर सहेजें ${java.home}/jre/lib/security/


2
@JamesBlack - हाँ, और सुनिश्चित करें कि सभी ठिकानों मैं जार के नीचे रखा कवर किया गया बनाने के लिए Java/jre/lib/security, Java/jdk/lib/securityऔर Java/jdk/jre/lib/security। 'Java -version' चलाना अपेक्षित विवरण देता है।
अरथ

5
आईबीएम की एसडीके (जैसे, WebSphere) के लिए, से असीमित अधिकार क्षेत्र नीति फ़ाइलों को डाउनलोड www14.software.ibm.com/webapp/iwm/web/preLogin.do?source=jcesdk
quietmint

4
चूंकि जावा 9 और जावा 8u151 को अब अधिकार क्षेत्र नीति फ़ाइलों को डाउनलोड और मैन्युअल रूप से स्थापित करने की कोई आवश्यकता नहीं है। असीमित क्रिप्टोग्राफी को सक्षम करने के लिए, कोई नया crypto.policy सुरक्षा गुण का उपयोग कर सकता है। यदि java.security फ़ाइल में नई सुरक्षा गुण (crypto.policy) सेट की गई है, या JCE फ्रेमवर्क प्रारंभ होने से पहले Security.setProperty () कॉल का उपयोग करके गतिशील रूप से सेट किया गया है, तो उस सेटिंग को सम्मानित किया जाएगा। डिफ़ॉल्ट रूप से, संपत्ति अपरिभाषित होगी।
मार्सिन क्लोपोटेक

4
तो, यह उत्कट उत्तर अब पुराना है, और हटा दिया गया है। हम इस उत्तर को कैसे बनाते या दबाते हैं ताकि stackoverflow.com/a/46857694/2808798 "स्वीकृत" उत्तर हो सके?
जेसी एडेलमैन

3
@ जेसे एडेलमैन - दुर्भाग्य से यह लगभग 7 साल पुराना है, बहुत कुछ नहीं किया जा सकता है। जिसे पूछा गया उसे बदलने की जरूरत होगी।
जेम्स ब्लैक

54

JRE / JDK / Java 8 क्षेत्राधिकार की फाइलें यहां देखी जा सकती हैं:

जावा क्रिप्टोग्राफी एक्सटेंशन (जेसीई) असीमित शक्ति क्षेत्राधिकार नीति फ़ाइलें 8 डाउनलोड

जैसे जेम्स ने ऊपर कहा:
फाइलों को इनस्टॉल करें ${java.home}/jre/lib/security/


2
6 और 7 का उपयोग करने की कोशिश की, लेकिन वे काम नहीं किया। स्थापित करना था 8. धन्यवाद।
जेसन किम

9
नई रिलीज़ JDK 8u151 में "क्रिप्टो नीति को नियंत्रित करने के लिए नई सुरक्षा संपत्ति" है। अब यह स्विच करने के लिए एक संपत्ति परिवर्तन है। निचला रेखा: 256-बिट कुंजियों का उपयोग करने में सक्षम करने के लिए "lib \ Security \ java.security" में "#" लाइन से "# crypto.policy = असीमित" हटा दें। oracle.com/technetwork/java/javase/8u151-relnotes-3850493.html
गोलार्ध

1
धन्यवाद! चूंकि यह एक सुरक्षा संपत्ति है, इसलिए आप Security.setProperty ("crypto.policy", "Unlimited") को भी कॉल कर सकते हैं। स्रोत: @hemisphire का लिंक :)
Fluf

42

JAVA 7 के लिए डाउनलोड लिंक jce-7-download है

Java \ jdk1.7.0_10 \ jre \ lib \ Security में दो डाउनलोड किए गए जार को कॉपी करें
पुराने जारों का बैकअप सुरक्षित पक्ष पर रखें।

JAVA 8 के लिए डाउनलोड लिंक jce-8-download
है जावा में डाउनलोड किए गए जार को कॉपी करें jdk1.8.0_45 \ jre \ lib \ सुरक्षा
पुराने जार का एक सुरक्षित स्थान पर होने का बैकअप लें।


39

जावा 9, जावा 8u161 , जावा 7u171 और जावा 6u181 के साथ सीमा अब डिफ़ॉल्ट रूप से अक्षम है। जावा बग डेटाबेस में समस्या देखें ।


जावा 8u151 के साथ शुरुआत करके आप सीमित रूप से प्रोग्राम को अक्षम कर सकते हैं।

पुराने रिलीज में, JCE के अधिकार क्षेत्र में असीमित क्रिप्टोग्राफी का उपयोग करने की अनुमति देने के लिए JCE क्षेत्राधिकार फ़ाइलों को अलग से डाउनलोड और इंस्टॉल किया जाना था। डाउनलोड और इंस्टॉल चरण अब आवश्यक नहीं हैं।

इसके बजाय अब आप जेसीई कक्षाओं के पहले उपयोग से पहले निम्न लाइन को लागू कर सकते हैं (यानी आवेदन शुरू होने के बाद अधिमानतः):

Security.setProperty("crypto.policy", "unlimited");

Android में क्या है? किस एपीआई स्तर पर प्रतिबंध के इन तरीकों को हल किया जा सकता है?
TheRealChx101

31

यह एक कोड केवल समाधान है । कॉन्फ़िगरेशन फ़ाइलों के साथ डाउनलोड या गड़बड़ करने की आवश्यकता नहीं है।

यह एक प्रतिबिंब आधारित समाधान है, जावा 8 पर परीक्षण किया गया है

अपने कार्यक्रम में एक बार इस विधि को कॉल करें।

// आयात

import javax.crypto.Cipher;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.Map;

//तरीका

public static void fixKeyLength() {
    String errorString = "Failed manually overriding key-length permissions.";
    int newMaxKeyLength;
    try {
        if ((newMaxKeyLength = Cipher.getMaxAllowedKeyLength("AES")) < 256) {
            Class c = Class.forName("javax.crypto.CryptoAllPermissionCollection");
            Constructor con = c.getDeclaredConstructor();
            con.setAccessible(true);
            Object allPermissionCollection = con.newInstance();
            Field f = c.getDeclaredField("all_allowed");
            f.setAccessible(true);
            f.setBoolean(allPermissionCollection, true);

            c = Class.forName("javax.crypto.CryptoPermissions");
            con = c.getDeclaredConstructor();
            con.setAccessible(true);
            Object allPermissions = con.newInstance();
            f = c.getDeclaredField("perms");
            f.setAccessible(true);
            ((Map) f.get(allPermissions)).put("*", allPermissionCollection);

            c = Class.forName("javax.crypto.JceSecurityManager");
            f = c.getDeclaredField("defaultPolicy");
            f.setAccessible(true);
            Field mf = Field.class.getDeclaredField("modifiers");
            mf.setAccessible(true);
            mf.setInt(f, f.getModifiers() & ~Modifier.FINAL);
            f.set(null, allPermissions);

            newMaxKeyLength = Cipher.getMaxAllowedKeyLength("AES");
        }
    } catch (Exception e) {
        throw new RuntimeException(errorString, e);
    }
    if (newMaxKeyLength < 256)
        throw new RuntimeException(errorString); // hack failed
}

क्रेडिट: डेल्हाट्स


4
कृपया ध्यान दें कि यह जावा एसई लाइसेंसिंग समझौते का उल्लंघन कर सकता है: डी। जेएवीए प्रौद्योगिकी निष्कर्ष। आप अपने लाइसेंसधारियों के व्यवहार को बनाने, संशोधित करने या बदलने के लिए या उनके लाइसेंस बनाने, संशोधित करने, या बदलने के लिए, कक्षाओं, इंटरफेस, या सबपैकेज को किसी भी तरह से "जावा", "जेवैक्स" के रूप में पहचान नहीं सकते हैं। javafx "," sun "," oracle "या इसी तरह का सम्मेलन Oracle में किसी भी नामकरण सम्मेलन पदनाम द्वारा निर्दिष्ट किया गया है। [...] स्रोत
SimMac

बहुत बहुत धन्यवाद


16

Windows 7 x64, Eclipse, और JDK 1.6.0_30 का उपयोग करते समय मैंने एक ही त्रुटि का अनुभव किया। JDK इंस्टालेशन फोल्डर में एक jreफोल्डर होता है। यह मुझे पहली बार में बंद कर दिया क्योंकि मैं JDK के lib / सुरक्षा फ़ोल्डर में कोई भाग्य के साथ aforementioned जार जोड़ रहा था। पूरा रास्ता:

C:\Program Files\Java\jdk1.6.0_30\jre\lib\security

इस संग्रह के jceफ़ोल्डर में मौजूद फ़ाइलों को उस फ़ोल्डर में डाउनलोड करें और निकालें ।


16

जावा में, डिफ़ॉल्ट रूप से एईएस एक 128 बिट कुंजी का समर्थन करता है, यदि आप 192 बिट या 256 बिट कुंजी का उपयोग करने की योजना बनाते हैं, तो जावा अनिवार्य रूप से अवैध कुंजी आकार अपवाद को फेंक देगा, जो आपको मिल रहा है।

समाधान विजेता के रूप में है और जेम्स ने सुझाव दिया है, आपको अपने JRE संस्करण (java6, java7 या java8) के अनुसार JCE (जावा क्रिप्टोग्राफी एक्सटेंशन) डाउनलोड करना होगा।

JCE ज़िप में JAR निम्नलिखित हैं:

  1. local_policy.jar
  2. US_export_policy.jar

आपको इन जार फॉर्म को बदलने की जरूरत है <JAVA_HOME>/jre/lib/security। यदि आप एक यूनिक्स प्रणाली पर हैं, तो संभवतः इसका उल्लेख करेंगे/home/urs/usr/lib/jvm/java-<version>-oracle/

कभी-कभी बस स्थानीय_पोलिश.जर की जगह, US_export_policy.jar सुरक्षा फ़ोल्डर में यूनिक्स पर काम नहीं करता है, इसलिए मेरा सुझाव है कि पहले सुरक्षा फ़ोल्डर को आपके डेस्कटॉप पर कॉपी करें, जार के @ डेस्कटॉप / सुरक्षा फ़ोल्डर को बदलें, सुरक्षा फ़ोल्डर को / jre / lib से हटाएं / / डेस्कटॉप सुरक्षा फ़ोल्डर को / jre / lib / पर ले जाएँ।

उदाहरण :: सुडो एमवी सुरक्षा /usr/lib/jvm/java-7-oracle/jre/lib


5

इस मुद्दे पर यहाँ क्या प्रतीत होता है की एक छोटी चर्चा है । वह पृष्ठ जो लिंक से प्रतीत होता है वह चला गया है, लेकिन प्रतिक्रियाओं में से एक वह हो सकता है जिसकी आपको आवश्यकता है:

वास्तव में, US_export_policy.jar और local_policy.jar की नकल कोर / लीब / jce से $ JAVA_HOME / jre / lib / सुरक्षा में मदद की। धन्यवाद।


धन्यवाद, लेकिन मेरे पास US_export_policy.jarऔर local_policy.jarमेरे लिब / सुरक्षा फ़ोल्डर में पहले से ही एक बार मैंने जावा इंस्टॉल किया था .. और मैं अपने जावा इंस्टॉलेशन फोल्डर में कोर / लीब / jce नहीं पा सका।
रिहर्सल

5

समस्या यह है सामग्री फ़ाइल के default_local.policy में local_policy.jar फ़ोल्डर में JRE \ lib \ सुरक्षा यदि आप JRE स्थापित करें,:

// Some countries have import limits on crypto strength. This policy file
// is worldwide importable.

grant {
    permission javax.crypto.CryptoPermission "DES", 64;
    permission javax.crypto.CryptoPermission "DESede", *;
    permission javax.crypto.CryptoPermission "RC2", 128,
                                     "javax.crypto.spec.RC2ParameterSpec", 128;
    permission javax.crypto.CryptoPermission "RC4", 128;
    permission javax.crypto.CryptoPermission "RC5", 128,
          "javax.crypto.spec.RC5ParameterSpec", *, 12, *;
    permission javax.crypto.CryptoPermission "RSA", *;
    permission javax.crypto.CryptoPermission *, 128;
};

अगर आपको दुनिया भर में मान्य सेटिंग्स की आवश्यकता नहीं है, तो आप बस इस फ़ाइल को संपादित कर सकते हैं और सामग्री को बदल सकते हैं

// Country-specific policy file for countries with no limits on crypto strength.
grant {
    // There is no restriction to any algorithms.
    permission javax.crypto.CryptoAllPermission;
};

यदि आप Oracle से JCE डाउनलोड करते हैं तो यह मिलता है।


4

मुझे यह मुद्दा भी मिला लेकिन डाउनलोड (JCE से) के साथ मौजूदा एक को बदलने के बाद किसी ने इस मुद्दे को हल किया। नई क्रिप्टो फ़ाइलों ने असीमित शक्ति प्रदान की।


2

डिफ़ॉल्ट रूप से, जावा केवल एन्क्रिप्शन के लिए एईएस 128 बिट (16 बाइट्स) के प्रमुख आकारों का समर्थन करता है। यदि आपको डिफ़ॉल्ट समर्थित से अधिक की आवश्यकता नहीं है, तो आप उपयोग करने से पहले कुंजी को उचित आकार में ट्रिम कर सकते हैं Cipher। डिफ़ॉल्ट समर्थित कुंजियों के लिए javadoc देखें ।

यह एक कुंजी उत्पन्न करने का एक उदाहरण है जो नीति फ़ाइलों को संशोधित किए बिना किसी भी जेवीएम संस्करण के साथ काम करेगा। अपने विवेक से उपयोग करें।

यहाँ पर एक अच्छा लेख है कि क्या AgileBits Blog पर कुंजी 128 से 256 कुंजी आकार मायने रखती है

SecretKeySpec getKey() {
    final pass = "47e7717f0f37ee72cb226278279aebef".getBytes("UTF-8");
    final sha = MessageDigest.getInstance("SHA-256");

    def key = sha.digest(pass);
    // use only first 128 bit (16 bytes). By default Java only supports AES 128 bit key sizes for encryption.
    // Updated jvm policies are required for 256 bit.
    key = Arrays.copyOf(key, 16);
    return new SecretKeySpec(key, AES);
}

सिफर प्रत्येक क्रिप्टो प्रकार के लिए मान्य कुंजी के आकार को कक्षाओं प्रलेखन अंक।
१६:४३ पर केपलॉजिक

Oracle दस्तावेज़ सिफर (एन्क्रिप्शन) एल्गोरिदम देखें : एईएस: एडवांस्ड एन्क्रिप्शन स्टैंडर्ड एनआईटी द्वारा दान 197 में निर्दिष्ट किया गया है। जोआन डेमेन और विन्सेन्ट रिज्मेन द्वारा रिजिन्डेल एल्गोरिथ्म के रूप में भी जाना जाता है, एईएस 128, 192, 192 का 128-बिट ब्लॉक सिफर सपोर्टिंग कीज़ है। और 256 बिट्स।
ज़ाफ

यह सच हो सकता है, लेकिन यह केवल प्रत्येक जावा संस्करण द्वारा 128-बिट का समर्थन करने के लिए आवश्यक है, जैसा कि कक्षा प्रलेखन में निर्दिष्ट है। इसे स्वयं परखें और आपको पता चलेगा कि आपको जेम्स ब्लैक के अन्य महत्वपूर्ण आकारों को करने के लिए पॉलिसी जार की आवश्यकता होगी
केपलॉजिक

कोई भी एईएस कार्यान्वयन जो 256-बिट कुंजियों का समर्थन नहीं करता है, अनिवार्य रूप से बेकार हो जाएगा क्योंकि यह 256-बिट कुंजियों का उपयोग करके एईएस एन्क्रिप्ट की पर्याप्त संख्या को डिक्रिप्ट करने में सक्षम नहीं होगा।
ज़ाफ

1
यदि 256-बिट कुंजी की आवश्यकता है तो सबसे अच्छा समाधान, शायद एकमात्र समाधान है, यदि आवश्यक हो तो पॉलिसी फ़ाइल को स्थापित करना है, न कि सुरक्षा को कमजोर करने वाली कुंजी को कम करना और अंतर-स्थिति के मामले में संभव नहीं हो सकता है।
ज़ैफ

2

जावा 9 या 8u151 से शुरू होकर, आप फाइल में एक लाइन का उपयोग कर सकते हैं:

<JAVA_HOME>/jre/lib/security/java.security

और बदलें:

#crypto.policy=unlimited

सेवा

crypto.policy=unlimited

2

यदि आप apt के साथ Linux वितरण का उपयोग कर रहे हैं और webupd8 PPA जोड़ा है, तो आप बस कमांड चला सकते हैं

apt-get install oracle-java8-unlimited-jce-policy

अन्य अपडेट:

  1. जावा 9 के साथ असीमित शक्ति क्षेत्राधिकार नीति फाइलें शामिल हैं और डिफ़ॉल्ट रूप से उपयोग की जाती हैं
  2. जावा 8 अपडेट 161 के साथ शुरू , जावा 8 असीमित शक्ति क्षेत्राधिकार नीति के लिए चूक।
  3. जावा 8 अपडेट 151 के साथ शुरू , असीमित शक्ति क्षेत्राधिकार नीति जावा 8 के साथ शामिल है लेकिन डिफ़ॉल्ट रूप से उपयोग नहीं की जाती है। इसे सक्षम करने के लिए, आपको java.security फ़ाइल को <java_home>/jre/lib/security(JDK के लिए) या <java_home>/lib/security(JRE के लिए ) संपादित करने की आवश्यकता है । Uncomment (या शामिल) लाइन

    crypto.policy=unlimited

    सुनिश्चित करें कि आप एक संपादक को व्यवस्थापक के रूप में चलाकर फ़ाइल का संपादन करें जेवीएम को फिर से शुरू करने के बाद ही नीति में बदलाव होता है

जावा 8 अपडेट से पहले 151 शेष उत्तर मान्य हैं। डाउनलोड JCE असीमित शक्ति क्षेत्राधिकार नीति फ़ाइलें और बदलें।

अधिक जानकारी के लिए, आप नीचे मेरे व्यक्तिगत ब्लॉग पोस्ट का उल्लेख कर सकते हैं - जावा क्रिप्टोग्राफी एक्सटेंशन (जेसीई) असीमित शक्ति क्षेत्राधिकार नीति फ़ाइलों को कैसे स्थापित करें


1

इस समस्या को हल करने के लिए दो विकल्प हैं

विकल्प संख्या 1: कम लंबाई वाले आरएसए 2048 के साथ प्रमाण पत्र का उपयोग करें

विकल्प संख्या 2: आप jre\lib\security जावा में जो भी इस्तेमाल करते हैं उसमें दो जार अपडेट करेंगे http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html

या आप आईबीएम websphere या इसके जावा का उपयोग करने वाले किसी भी एप्लिकेशन सर्वर का उपयोग करते हैं। मुख्य समस्या जिसका मुझे सामना करना पड़ा, मैंने अधिकतम लंबाई के साथ प्रमाणीकरण का उपयोग किया, जब मैंने एक ही अपवाद websphere पर कानों को तैनात किया

Java Security: Illegal key size or default parameters?

मैं दो जार के साथ websphere में जावा अद्यतन intsalled फ़ोल्डर अद्यतन https://www14.software.ibm.com/webapp/iwm/web/reg/pick.do?source=jcesdk&lang.en_US

आप लिंक https://www-01.ibm.com/support/docview.wss?uid=swg21663373 पर संदर्भ देख सकते हैं


1

सुनिश्चित करें कि आप JDK / JRE के नवीनतम संस्करण का उपयोग करते हैं

मेरे मामले में, मैंने JCE को JRE फ़ोल्डर में रखा था, लेकिन इससे कोई मदद नहीं मिली। ऐसा इसलिए हुआ क्योंकि मैं सीधे आईडीई (जेडीके का उपयोग करके) से अपना प्रोजेक्ट चला रहा था।

फिर मैंने अपने JDK और JRE को नवीनतम संस्करण (1.8.0_211) में अपडेट किया और समस्या चली गई।

अधिक जानकारी: https://bugs.java.com/bugdatabase/view_bug.do?bug_id=JDK-8170157


1

डिफ़ॉल्ट JDK केवल 128 बिट कुंजी के माध्यम से एन्क्रिप्शन का समर्थन करता है क्योंकि अमेरिकी प्रतिबंधों के कारण। तो समर्थन एन्क्रिप्शन 256 बिट लंबे कुंजी से हम बदलने के लिए local_policy.jarऔर US_export_policy.jarsमें $JAVA_HOME/java-8-oracle/jre/lib/securityफ़ोल्डर अन्यथा यह दे देंगे:

java.security.InvalidKeyException: अवैध कुंजी आकार या डिफ़ॉल्ट


0

आपको वहां जाने की जरूरत है

/ jdk1.8.0_152 | / jre | / परिवाद | / सुरक्षा | java.security और असहजता

#crypto.policy=unlimited

सेवा

crypto.policy=unlimited
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.