2013-08-08 4 views
5

क्या नामित स्थिरांक के बजाय क्रिप्टोग्राफिक एल्गोरिदम के लिए मानक नाम बनाने में किए गए निर्णय के पीछे कोई तर्क है?नामांकित कॉन्स्टेंट के बिना मानक नाम

ऐसा लगता है कि सूर्य (ठीक है, अब ओरेकल) documenting algorithm names में एक स्पष्ट प्रयास प्रस्तुत करता है, लेकिन पुस्तकालयों के भीतर दृढ़ता से परिभाषित नाम स्थिरांक प्रदान नहीं करता है। मैं समझता हूं कि, एक क्रॉस-प्लेटफार्म परिप्रेक्ष्य से, स्ट्रिंग-सर्च दृष्टिकोण फायदेमंद है।

हालांकि, ऐसा करने में प्रोग्राम प्रोग्रामिक त्रुटियों को रन-टाइम में देरी हो रही है, जिसे मैं केवल चीजों को आवश्यक से अधिक कठिन बना सकता हूं। ऐसा क्यों है?

+1

शायद एक डिजाइन समस्या थी जिसे उन्होंने अभी तक तय नहीं किया है। आप अपने स्वयं के स्थिरांक (शायद एक 'enum' में) हो सकते हैं जो एल्गोरिदम के नामों को इंगित करता है। यहां के बजाय ओरेकल मंचों में इसे पोस्ट करना बेहतर होगा। –

+0

@ लुइगी मैन्डोज़ा मैंने कुछ अतिरिक्त कारण जोड़े हैं जो स्थिरांक पर तार चुनने के लिए प्रभावशाली हो सकते हैं। मुझे पूरा यकीन है कि यह एक सुविधा है, कोई मुद्दा नहीं। –

उत्तर

1

मुझे लगता है कि यह आपको अपने स्वयं के गैर मानक नामों और कारखाने के कार्यान्वयन के साथ आने की अनुमति देगा। (या उन भविष्य के प्लग-इन को अनुमति दें जो अभी तक मौजूद नहीं हैं) संकलन त्रुटियों के बिना।

यह उपयोगकर्ताओं को क्लासपाथ में कक्षाएं जोड़कर रनटाइम पर नई क्रिप्टो कक्षाएं जोड़ने की अनुमति देगा जो संकलन समय पर ज्ञात नहीं थे।

1

String उदाहरण में प्रयुक्त Cipher.getInstance(String algorithm) में एक ही नाम नहीं है, इसमें परिवर्तन भी शामिल हैं। आपके पास "DES/CFB8/NoPadding" जैसा कुछ होगा जो डीईएस एल्गोरिदम को इंगित करता है, सिफर फीडबैक मोड में 8 बिट्स आउटपुट के साथ कोई पैडिंग की आवश्यकता नहीं होती है। इस संयोजन को अन्य सिफर भी इस्तेमाल किया जा सकता है। तो यह पहले से ही cipher * modes * bitsizes * paddingmodes के बराबर कई स्थिरांक उत्पन्न करेगा। अब आप अलग-अलग गणनाएं बना सकते हैं, लेकिन आप पहले ही देख सकते हैं कि यह कहां से चोट लगाना शुरू कर देगा।

स्ट्रिंग्स enums की तुलना में अधिक लचीला हैं या (वहां भी नहीं जाते) स्थिरांक हैं। यह अतिरिक्त एल्गोरिदम जोड़ने के लिए बहुत आसान बनाता है। आप एल्गोरिदम भी जोड़ सकते हैं और उन्हें पुराने सॉफ़्टवेयर में कॉन्फ़िगर कर सकते हैं; बस एक प्रदाता जोड़ें जो दिए गए एल्गोरिदम लागू करता है। यह बहुत महत्वपूर्ण है जब प्रदाताओं और सेवाओं से निर्मित गतिशील ढांचे में उपयोग किया जाता है।

जैसा कि लुइगी ने इंगित किया था, एक ऐसा कारखाना बनाना बहुत आसान होगा जो एक enum लेता है और Cipher या Signature उदाहरण देता है। आपको केवल कारखाने का परीक्षण करना होगा।

+0

या धाराप्रवाह इंटरफेस पैटर्न के साथ एक बुलडर। –

+0

@LuiggiMendoza निश्चित रूप से, हालांकि व्यक्तिगत रूप से मुझे उस डिजाइन पैटर्न को पसंद नहीं है * वह * बहुत कुछ। तो आपको 'cipherbuilder.setAlgorithm (ALGO) .setMode (MODE) .buildCipher()' मिलेगा? –

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