KeyGenerator
का उपयोग करना पसंदीदा तरीका होगा। जैसा कि डंकन ने इंगित किया था, मैं निश्चित रूप से प्रारंभिकरण के दौरान मुख्य आकार देता हूं। KeyFactory
एक ऐसी विधि है जिसका उपयोग पूर्व-मौजूदा कुंजी के लिए किया जाना चाहिए।
ठीक है, तो चलिए इस के बारे में बताते हैं। सिद्धांत रूप में एईएस कुंजी का कोई मूल्य हो सकता है। (3) डीईएस में कोई "कमजोर चाबियाँ" नहीं हैं। न ही कोई बिट्स हैं जिनके पास विशिष्ट अर्थ है (3) डीईएस समानता बिट्स। तो एक कुंजी उत्पन्न करना यादृच्छिक मानों के साथ बाइट सरणी उत्पन्न करने और इसके आसपास SecretKeySpec
बनाने के समान सरल हो सकता है।
लेकिन आपके द्वारा उपयोग की जा रही विधि के फायदे अभी भी हैं: KeyGenerator
विशेष रूप से कुंजी उत्पन्न करने के लिए बनाया गया है। इसका मतलब है कि इस पीढ़ी के लिए कोड अनुकूलित किया जा सकता है। यह में दक्षता और सुरक्षा लाभ हो सकते हैं। उदाहरण के लिए कुंजी को बेनकाब करने वाले टाइम साइड चैनल हमलों से बचने के लिए इसे प्रोग्राम किया जा सकता है। ध्यान दें कि byte[]
को साफ़ करने के लिए पहले से ही एक अच्छा विचार हो सकता है, जिसमें महत्वपूर्ण जानकारी है क्योंकि उन्हें एक स्वैप फ़ाइल में लीक किया जा सकता है (हालांकि यह मामला हो सकता है)।
इसके अलावा, जैसा कि कहा गया है, सभी एल्गोरिदम पूरी तरह यादृच्छिक कुंजी का उपयोग नहीं कर रहे हैं। तो KeyGenerator
का उपयोग करके अन्य एल्गोरिदम पर स्विच करना आसान हो जाएगा। अधिक आधुनिक सिफर हालांकि पूरी तरह से यादृच्छिक कुंजी स्वीकार करेंगे; इसे उदाहरण पर एक बड़ा लाभ माना जाता है। डेस।
अंत में, और मेरे मामले में सबसे महत्वपूर्ण कारण यह है कि KeyGenerator
विधि एक सुरक्षित टोकन (स्मार्ट कार्ड, टीपीएम, यूएसबी टोकन या एचएसएम) के भीतर एईएस कुंजी को संभालने का एकमात्र वैध तरीका है। यदि आप byte[]
को SecretKeySpec
के साथ बनाते हैं तो कुंजी मेमोरी से आनी चाहिए। इसका मतलब है कि कुंजी को सुरक्षित टोकन में रखा जा सकता है, लेकिन कुंजी को स्मृति में उजागर किया गया है। आम तौर पर, सुरक्षित टोकन केवल उन चाबियों के साथ काम करते हैं जो या तो सुरक्षित टोकन में उत्पन्न होते हैं या उदा। एक स्मार्ट कार्ड या एक महत्वपूर्ण समारोह। एक KeyGenerator
एक प्रदाता के साथ आपूर्ति की जा सकती है ताकि कुंजी सुरक्षित टोकन के भीतर सीधे उत्पन्न हो।
जैसा कि Duncan's answer में इंगित किया गया है: हमेशा कुंजी आकार (और कोई अन्य पैरामीटर) निर्दिष्ट करें। प्रदाता डिफ़ॉल्ट पर भरोसा न करें क्योंकि यह स्पष्ट नहीं करेगा कि आपका एप्लिकेशन क्या कर रहा है, और प्रत्येक प्रदाता के पास अपना स्वयं का डिफ़ॉल्ट हो सकता है।
स्रोत
2013-08-14 10:38:19
यह mighth मदद http://stackoverflow.com/questions साथ रैंड की जगह: यह मैं क्या उपयोग है/10252449/is-aes-key-random – Tala
@ टाला वह जगह है जहां मुझे [उद्धृत कोड] (http://stackoverflow.com/a/10252662/1005481) मिला। लेकिन उस पोस्ट से, मैं यादृच्छिक कुंजी बनाने के तरीके पर सर्वसम्मति निर्धारित नहीं कर सका, और यह एक सुरक्षित तरीका क्यों था। –