2012-04-17 13 views
18

का समर्थन करने वाला कोई भी प्रदाता नहीं मिल रहा है मैं एईएस एल्गोरिदम का उपयोग कर डेटा एन्क्रिप्ट करने की कोशिश कर रहा था। हालांकि, निम्नलिखित अपवाद के साथ हुआ है।java.security.No.SuchAlgorithmException: एईएस/ईसीबी/पीकेसीएस 7PADDING

java.security.NoSuchAlgorithmException: 
    Cannot find any provider supporting AES/ECB/PKCS7PADDING 

किसी को इस मुद्दे का समाधान पता है? मेरा जेडीके का संस्करण 1.7 है।

+0

ध्यान दें कि ईसीबी सीपीए सुरक्षित नहीं है, इसके बजाय सीबीसी का उपयोग करें (यदि आप केवल संग्रहीत डेटा की गोपनीयता चाहते हैं)। –

उत्तर

28

आप ब्लॉक साइफर उपयोग के लिए पीकेसीएस # 7 पैडिंग निर्दिष्ट नहीं करना चाहते हैं। आप पीकेसीएस # 5 पैडिंग निर्दिष्ट करना चाहते हैं। पीकेसीएस # 5 ब्लॉक सिफर के उपयोग के लिए निर्दिष्ट है जबकि पीकेसीएस # 7 नहीं है (यह एस/एमआईएमई जैसे विभिन्न स्थानों के लिए उपयोग है)। मैं इंगित करूंगा कि पीकेसीएस # 5 और पीकेसीएस # 7 वास्तव में वास्तव में उसी प्रकार के पैडिंग को निर्दिष्ट करते हैं (वे वही हैं!), लेकिन इस संदर्भ में उपयोग किए जाने पर इसे # 5 कहा जाता है। :)

तो, "AES/ECB/PKCS7PADDING" के बजाय, आप "AES/ECB/PKCS5PADDING" चाहते हैं। यह एक सिफर कार्यान्वयन है कि जावा प्लेटफार्म के हर कार्यान्वयन को समर्थन देने के लिए आवश्यक है। अधिक जानकारी के लिए documentation of the Cipher class देखें।

+0

आपके उत्तर के लिए बहुत बहुत धन्यवाद। फिर जेसीई प्रदाता पीकेसीएस 7 पैडिंग का समर्थन नहीं करता है? –

+2

सही। यह नहीं है (ठीक है, चूंकि # 5 और # 7 एक ही पैडिंग हैं ... मुझे लगता है कि आप यह कह सकते हैं?)। और आपका स्वागत है। यदि आप इससे खुश हैं तो उत्तर स्वीकार करना याद रखें। :) – jeffsix

+4

यह उत्तर ठीक है, लेकिन थोड़ा उलझन में है क्योंकि आप * ब्लॉक सिफर के लिए पीकेसीएस # 7 पैडिंग का उपयोग करना चाहते हैं। यह है कि [मानक एल्गोरिदम नाम] के अनुसार, 'PKCS7Padding' गलत नाम है, (http://docs.oracle.com/javase/7/docs/technotes/guides/security/StandardNames.html#Cipher) PKCS # 7 पैडिंग संदेशों के लिए इस पैडिंग योजना का उपयोग करता है जो ब्लॉक सिफर के साथ एन्क्रिप्ट किए गए हैं। इससे कोई फर्क नहीं पड़ता कि बड़ा संदर्भ क्या है। – erickson

1

आप एईएस/ईसीबी उपयोग करना चाहते हैं/PKCS7Padding तो उछाल वाले महल हिंदुस्तान टाइम्स tp://www.bouncycastle.org/specifications.html

+0

सच है लेकिन यह नीचे एक ही पैडिंग एल्गोरिदम है। –

3

का समर्थन करेंगे मुद्दे के एक बहुत ही व्यापक व्याख्या यह है कि PKCS # 5 और PKCS # 7 क्रिप्टोग्राफिक मानकों का पाठ भी शामिल है के लिए, कृपया here देखें।


पीकेसीएस # 5 पैडिंग का मतलब है 1 से 8 बाइट पैडिंग। पैडिंग बाइट्स में स्वयं बाइट के रूप में एन्कोड किए गए पैडिंग बाइट्स की मात्रा होती है। पीकेसीएस # 5 पैडिंग डीईएस के लिए निर्दिष्ट किया गया था, लेकिन यह 8 बाइट्स के ब्लॉक आकार वाले किसी भी ब्लॉक सिफर के लिए उपयुक्त होगा।

अब डीईएस विनिर्देशों और यहां तक ​​कि पासवर्ड आधारित एन्क्रिप्शन के लिए पीकेसीएस # 5 विनिर्देश और जावा काफी लंबे समय तक। 2002 में एईएस को केवल मानकीकृत किया गया था, जावा के बाद और यहां तक ​​कि जावा 2 भी पेश किया गया था। एईएस ने अपनी उपस्थिति बनाने से पहले (ट्रिपल) डीईएस और पीकेसीएस # 5 पैडिंग जावा में एकीकृत किया गया था।

जब जावा - या अधिक सटीक, सूर्य जेसीई प्रदाता - एईएस कार्यक्षमता प्राप्त करता है तो इसे 16 बाइट्स के ब्लॉक आकार के लिए पैडिंग विधि की आवश्यकता होती है। पीकेसीएस # 7 इस पैडिंग विधि को निर्दिष्ट करता है जो is identical to PKCS#5 padding है, सिवाय इसके कि इसे 2 से 255 बाइट्स के ब्लॉक आकारों के लिए परिभाषित किया गया है (यदि बाइट का अधिकतम मान शून्य आधारित हस्ताक्षरित पूर्णांक को एन्कोड करता है)। हालांकि, पैडिंग विधि पहले से ही थी; इसे "PKCS5Padding" नाम दिया गया था। तो एक नया नाम शुरू करने के बजाय, "PKCS5Padding" को फिर से उपयोग किया गया था।

अब तक सूर्य प्रदाता को वास्तव में "PKCS7Padding" का समर्थन करना चाहिए क्योंकि पीकेसीएस # 5 पैडिंग बस गलत है। यह सिर्फ जावा नामकरण समस्या नहीं है, यह किसी भी डेवलपर के लिए एक मुद्दा है जो जावा पर क्रिप्टोग्राफिक प्रोटोकॉल या पोर्ट अन्य अनुप्रयोगों को लागू करने का प्रयास करता है। अभी के लिए, आपको "PKCS7Padding" के बजाय "PKCS5Padding" का उपयोग करना चाहिए।