मुझे यह कोड http://www.ravenblast.com/index.php/blog/android-password-text-encryption/ से मिला है और, हालांकि यह काम करता है, मेरे पास बढ़ती संदेह है कि यह पर्याप्त सुरक्षित नहीं है। कोई प्रारंभिक वेक्टर नहीं है जो अन्य स्रोतों के अनुसार जरूरी प्रतीत होता है।क्या यह एईएस एन्क्रिप्शन पर्याप्त सुरक्षित है?
public static String encrypt(String toEncrypt, byte[ ] key) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[ ] encryptedBytes = cipher.doFinal(toEncrypt.getBytes());
String encrypted = Base64.encodeBytes(encryptedBytes);
return encrypted;
}
public static String decrypt(String encryptedText, byte[ ] key) throws Exception {
SecretKeySpec skeySpec = new SecretKeySpec(key, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.DECRYPT_MODE, skeySpec);
byte[] toDecrypt = Base64.decode(encryptedText);
byte[] encrypted = cipher.doFinal(toDecrypt);
return new String(encrypted);
}
आप एक चतुर्थ और एक मैक की जरूरत है। एक एन्क्रिप्टेड-मैक-मैक योजना में मैक होने के बाद, या जब आप एक सक्रिय हमलावर का सामना करते हैं तो विशेष प्रमाणीकृत एन्क्रिप्शन का उपयोग करना बहुत महत्वपूर्ण होता है। अन्यथा यह संभावना है कि हमलावर आपको उसके लिए एक संदेश डिक्रिप्ट करने में चाल कर सकता है। पैडिंग ऑर्कल्स एक व्यावहारिक हमला है। यदि यह ईसीबी है (मैं इसे देखने के लिए एपीआई के साथ पर्याप्त परिचित नहीं हूं), तो आपको एक बेहतर मोड में भी स्विच करने की आवश्यकता है। – CodesInChaos
'getBytes()' का उपयोग करना एक बुरा विचार भी है, क्योंकि यह एक मंच/संस्कृति निर्भर एन्कोडिंग का उपयोग करता है। इसके बजाय यूटीएफ -8 का प्रयोग करें। – CodesInChaos