प्रमाणीकृत एन्क्रिप्शन की आवश्यकता है कि हम किसी संदेश को एन्क्रिप्ट करने और प्रमाणीकृत करने के लिए कुछ स्वीकृत मानक का उपयोग करें। तो हम दोनों संदेश को एन्क्रिप्ट करते हैं और संदेश पर मैक की गणना करते हैं ताकि यह सत्यापित किया जा सके कि इसे छेड़छाड़ नहीं किया गया है।जावा में प्रमाणीकृत एन्क्रिप्शन करने का सही तरीका क्या है?
This question पासवर्ड आधारित कुंजी को मजबूत बनाने और एन्क्रिप्शन प्रदर्शन करने के लिए एक तरह से की रूपरेखा:
/* Derive the key, given password and salt. */
SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
KeySpec spec = new PBEKeySpec(password, salt, 65536, 256);
SecretKey tmp = factory.generateSecret(spec);
SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");
/* Encrypt the message. */
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, secret);
AlgorithmParameters params = cipher.getParameters();
byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
byte[] ciphertext = cipher.doFinal("Hello, World!".getBytes("UTF-8"));
लेकिन जहाँ तक मैं बता सकता हूँ, यह किसी भी मैक सिफर पर गणना नहीं करता है और इतने असुरक्षित हो जाएगा। जावा में प्रमाणीकृत एन्क्रिप्शन करने के लिए स्वीकार्य मानक क्या है?
यदि आप पूर्ण संदेश को एन्क्रिप्ट/डिक्रिप्ट करते हैं तो आप जानते हैं कि यह बिना छेड़छाड़ नहीं किया गया है !? जब आप "सादे पाठ" में कोई संदेश (या डेटा) भेजना चाहते हैं तो एचएमएसी का उपयोग नहीं किया जाता है और फिर सादा पाठ प्रमाणित करने के लिए एचएमएसी भेजते हैं? – TacticalCoder
प्रमाणित एन्क्रिप्शन करने के लिए कोई स्वीकार्य मानक नहीं है, यह (असममित) हस्ताक्षर, मैक (उदा। एईएससीएमएसी), एचएमएसी या प्रमाणीकृत मोड हो सकता है। हालांकि कुछ असुरक्षित हैं (उदाहरण के लिए डिफ़ॉल्ट एईएस-मैक बहुत सुरक्षित नहीं है)। एक अच्छे उत्तर के लिए नीचे देखें जो आपके उपयोग के मामले में फिट होना चाहिए। –
एरिक उत्तर के साथ कोई समस्या? –