2012-12-05 7 views
23

मैं जावा में स्विंग आधारित एप्लिकेशन बना रहा हूं जो कुछ एन्क्रिप्शन तकनीक का उपयोग करता है।जेसीई जावा स्विंग एप्लिकेशन में प्रदाता बीसी को प्रमाणित नहीं कर सकता

java.security.NoSuchProviderException: JCE cannot authenticate the provider BC 
     at javax.crypto.SunJCE_b.a(DashoA13*..) 
     at javax.crypto.KeyGenerator.getInstance(DashoA13*..) 

तो समस्या क्या है: लेकिन javax.crypto.KeyGenerator.getInstance ("एईएस", "ईसा पूर्व") अपवाद देता है?

+8

इस में

java.lang.SecurityException: JCE cannot authenticate the provider SC 

अधिक जानकारी आम तौर पर मतलब है कि आप कुछ वर्गों/जार और/या classpath की पैकेजिंग के साथ गलत किया है। आप बीसी कक्षाओं को अपने जार से निकालने और उन्हें एक और जार में नहीं डाल सकते हैं। –

उत्तर

25

ग्रेग्स से टिप्पणी पर विस्तार करने के लिए, सभी जेसीई प्रदाता JARs को आपके जावा रनटाइम द्वारा भरोसा करने से पहले हस्ताक्षरित होना चाहिए।

बाउंसीकास्टल कर्तव्यपूर्वक हस्ताक्षर किए गए जार की आपूर्ति करता है जो बिना किसी समस्या के काम करेगा। हालांकि, अगर आप इस JAR से कक्षा फ़ाइलों को निकालें, या स्रोत को पुन: संकलित करें, तो यह हस्ताक्षर को हटा देगा और जावा को कोड को अस्वीकार करने का कारण बन जाएगा। How to sign a custom JCE security provider

+7

मैंने जार फ़ाइल को निकाला या पुन: संकलित नहीं किया, मैं केवल http://repo2.maven.org/maven2/org/bouncycastle/ से bcprov-jdk14 और bcpkix-jdk14 डाउनलोड करता हूं; हालांकि, यह मेरे लिए काम नहीं करता है! –

23

1. संपादित JRE \ lib \ सुरक्षा \ java.security

जोड़ने security.provider.10 = org.bouncycastle.jce.provider.BouncyCastleProvider

:

इस से संबंधित तो सवाल देखें

2. बीसी कॉपी * .jar करने के लिए JRE \ lib \ ext

+0

इस सुझाव को वोट क्यों दिया गया था? इससे मुझे इसमें मदद मिली: http://stackoverflow.com/questions/27168951/jce-cannot-authenticate-the-provider-bc-when-running-a-jar – Anton

+0

यह एकमात्र चीज थी जिसने मेरी मदद की। –

+1

यह मेरे लिए बहुत अच्छा काम किया! मैं ज्योथन का उपयोग कर रहा था, भले ही मैंने सीधे जार फ़ाइलों को निर्दिष्ट किया (क्लास फाइलों को अलग से नहीं निकाला), मुझे अपवाद मिला। संभवतः ज्योथन इसे निकालता है। महान समाधान धन्यवाद! – rsmoorthy

3

इस मुद्दे की खोज, लेकिन वास्तव में SpongyCastle का उपयोग करने वालों, यह दिलचस्प हो सकता है के लिए पता चला है कि Android पर ऐसे हस्ताक्षर परीक्षण नहीं हैं और आपके परीक्षणों के लिए आप OpenJDK-8 के माध्यम से स्पॉन्गीकास्टल का उपयोग कर सकते हैं क्योंकि यह हस्ताक्षरों की परवाह नहीं करता है।

संदर्भ के लिए, SpongyCastle साथ त्रुटि पढ़ता है: this issue

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