Как шифровать значения сеанса в Android

Я разрабатываю приложение для Android, основанное на веб-сервере. Пользователи, которые установили приложение, должны зарегистрироваться в Интернете, чтобы они могли войти в систему. Когда кто-то пытается войти в систему, я проверяю их информацию с помощью API .

Поэтому мне любопытно, что нужно продолжать и шифровать . Должен ли я шифровать значения или просто помещать их все в SharedPreferences ? Если требуется шифрование, какой эффективный способ?

И последнее, но не менее важное: достаточно ли SharedPreferences с точки зрения безопасности?

Благодарю.

Конечно, вы должны шифровать пользовательские настройки, такие как логин, пароль или электронная почта. Я предпочитаю SharedPreferences для хранения, и да, этого достаточно с точки зрения безопасности.

Я нашел этот два метода в StackOverflow, это достаточно справедливо:

 protected String encrypt( String value ) { try { final byte[] bytes = value!=null ? value.getBytes(UTF8) : new byte[0]; SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES"); SecretKey key = keyFactory.generateSecret(new PBEKeySpec(SEKRIT)); Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES"); pbeCipher.init(Cipher.ENCRYPT_MODE, key, new PBEParameterSpec(Settings.Secure.getString(context.getContentResolver(),Settings.System.ANDROID_ID).getBytes(UTF8), 20)); return new String(Base64.encode(pbeCipher.doFinal(bytes), Base64.NO_WRAP),UTF8); } catch( Exception e ) { throw new RuntimeException(e); } } protected String decrypt(String value){ try { final byte[] bytes = value!=null ? Base64.decode(value,Base64.DEFAULT) : new byte[0]; SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWithMD5AndDES"); SecretKey key = keyFactory.generateSecret(new PBEKeySpec(SEKRIT)); Cipher pbeCipher = Cipher.getInstance("PBEWithMD5AndDES"); pbeCipher.init(Cipher.DECRYPT_MODE, key, new PBEParameterSpec(Settings.Secure.getString(context.getContentResolver(),Settings.System.ANDROID_ID).getBytes(UTF8), 20)); return new String(pbeCipher.doFinal(bytes),UTF8); } catch( Exception e) { throw new RuntimeException(e); } } 

Не удалось найти ссылку, если найду, я отредактирую свой ответ.

Изменить : я нашел источник, вы можете посмотреть на все обсуждения здесь .

Шифрование легко, но реальный вопрос заключается в том, какой ключ? Если вы жестко задаете ключ в приложении или извлекаете его из некоторого известного значения, любой, у кого есть доступ к устройству, может легко расшифровать эти значения. То, что вы достигаете, – просто обфускация. Так как Android не имеет открытого API для системного хранилища ключей, вы не можете многое сделать, если вам нужно сохранить фактический пароль. Если, конечно, вы не вводите пароль пользователя каждый раз, когда запускаете приложение, что поражает цель.

Если вы управляете как сервером, так и клиентом, другой подход заключается в использовании определенной формы аутентификации на токенах и только сохранения токена. Так как маркеры могут истекать и аннулироваться, ущерб, нанесенный кем-либо, улавливающим ваш токен, намного меньше, чем обнародование фактического пароля (который может быть использован и на других сайтах).

Пожалуйста, обратитесь к этой ссылке:

http://www.androidsnippets.com/encryptdecrypt-strings

Позвольте мне знать, если это помогает.