2008-12-04 15 views
5

मैं एक 16 बाइट ब्लॉक आकार के साथ एईएस सिफर का उपयोग कर रहा हूं।जावा सिफर - एईएस पैडिंग समस्या

यदि मैं 16 बाइट स्ट्रिंग को आज़माता और एन्क्रिप्ट करता हूं तो मुझे कोई समस्या नहीं है, लेकिन 16 की एक से अधिक की कोई अन्य लंबाई अपवाद फेंक रही है।

मुझे 3-डीईएस के साथ पता है, आप एल्गोरिदम के हिस्से के रूप में एक पैडिंग प्रकार निर्दिष्ट कर सकते हैं और इसे कोई अतिरिक्त काम (जैसे डीईएस/सीबीसी/पीकेसीएस 5 पैडिंग) के साथ संभाला जाता है, लेकिन क्या एईएस के साथ इसे निर्दिष्ट करने का कोई तरीका है?

या क्या मुझे 16 से अधिक के लिए मैन्युअल रूप से पैट पैड करने की आवश्यकता है, और फिर जब मैं डिक्रिप्ट करता हूं तो उन्हें पट्टी करें? यहां एक संक्षिप्त कोड नमूना है।

encrypt = Cipher.getInstance("AES", provider); 
encrypt.init(Cipher.ENCRYPT_MODE, key) ; 
byte[] encrypted = encrypt.doFinal(plainTxt.getBytes()) ; 

किसी भी और सभी उत्तरों की सराहना की!

अग्रिम धन्यवाद, Ciarán

+2

पैडेंटिक टिप्पणी: एईएस की परिभाषा के अनुसार केवल 16 बाइट ब्लॉजिज़ है। रिजेंडेल (मूल नाम और विनिर्देश) में 16,24 और 32 बाइट्स का अवरोध था, लेकिन एईएस में उपयोग के लिए केवल 16 बाइट ब्लॉक की अनुमति है। रिजेंडेल ने 128, 160, 1 9 2, 224, 256 की चाबी का समर्थन किया, लेकिन केवल 128, 1 9 2 और 256 एईएस में समर्थित हैं। –

उत्तर

5

यह बिल्कुल एईएस के साथ एक ही काम करना चाहिए, अर्थात गद्दी मोड सिफर के साथ एक साथ निर्दिष्ट किया जाना है। कौन सा पैडिंग मोड लागू किया गया है प्रदाता पर निर्भर करता है और इसके दस्तावेज में वर्णित किया जाना चाहिए।

JCE प्रलेखन के अनुसार: http://java.sun.com/j2se/1.5.0/docs/guide/security/jce/JCERefGuide.html#AppA PKCS5Padding जैसे मानक गद्दी मोड हमेशा समर्थन किया जाना चाहिए (कम से कम, कि मैं इसे कैसे व्याख्या है)।

+0

लड़का मैं उस पृष्ठ से परिचित हूं :) जब आप प्रदाता कहते हैं, तो क्या आपका मतलब है कि जेसीई का कार्यान्वयन मैं कर रहा हूं? मैं इसके लिए दस्तावेज़ों की जांच करूंगा। –

+0

हां, प्रदाता (getInstance() विधि में दूसरा पैरामीटर मूल रूप से सिफर इंटरफ़ेस लागू करता है। आप एक से अधिक क्रिप्टोग्राफी प्रदाता सक्रिय हो सकते हैं। सन का जेडीके सनजेसी प्रदाता के साथ आता है –

+0

चूंकि मैं जावा/कोल्डफ्यूजन के माध्यम से एईएस के 'अवधारणा का सबूत' कोडिंग कर रहा था, इसलिए मैंने यहां वर्णित विधि 2 का उपयोग करके अपना खुद का पैडिंग लागू किया: http: //www.di-mgt। com.au/cryptopad.html। मैं असली चीज़ के करीब नजर डाल सकता हूं। हालांकि मैं इसे उत्तर के रूप में चिह्नित करूंगा। –

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