Подтвердить что ты не робот

Шифровать данные в SharedPreferences

В настоящее время я разрабатываю структуру для доступа к веб-сервисам oAuth 1 и 2, и мой вопрос заключается в том, как безопасным образом хранить конфиденциальные данные, такие как ключ доступа oAuth? проблема с этими ключами в том, что на некоторых платформах, таких как твиттер, используется постоянный ключ, и если кто-то получит доступ к этому ключу, он сможет делать все, что захочет, с учетной записью пользователя twitter.

можно ли автоматически зашифровать данные до их сохранения в общих настройках? Или есть лучший способ/место для хранения очень важных данных?

ОБНОВЛЕНИЕ - ТАКЖЕ ПРОЧИТАЙТЕ: Каков наиболее подходящий способ хранения пользовательских настроек в приложении Android

4b9b3361

Ответ 1

1). Как зашифровать?

В Android шифрование выполняется через Java Cryptography Architecture (JCA). В основном это пакет javax.crypto.*.

Справочное руководство JCA

Вот пример использования JCA API (в частности, ARO-alrorithm).

2). Где хранить?

API шифрования манипулирует массивами байтов (не строк). Это означает, что вы можете использовать SharedPreferences, но вам необходимо применить кодировку Base-64 в зашифрованном массиве байтов, прежде чем поместить его в SharedPreferences (иначе XML-парсер не сможет прочитать файл общих настроек). Затем, чтобы прочитать, вам нужно будет использовать декодирование Base-64. Обратите внимание, что по умолчанию большинство версий ОС Android не имеют встроенного в Base-64 API (см. Раздел UPDATE). Поэтому, чтобы удалить эту нагрузку Base-64, я бы рекомендовал хранить ваши байты в приватном файле.

ОБНОВЛЕНИЕ: Начиная с уровня API 8, API имеет android.util.Base64.

Ответ 2

Вы также можете взглянуть на этот класс, который я сделал для выполнения именно этого: https://github.com/sveinungkb/encrypted-userprefs

Он использует AES вместо устаревшего и слабого DES, используемого в другом предложении.

Ответ 4

Я бы рекомендовал использовать Facebook Conceal для шифрования на Android почти каждый раз - это быстрая библиотека Android, которая делает некоторые действительно разумные решения и оставляет вас с помощью нескольких простых интерфейсов для фактической работы.

Бонус! Недавно я собрал головоломку о том, как вы можете использовать ее от Xamarin - см. Мою статью о защите ваших данных приложения С#, используя скрытие для получения дополнительной информации.

Ответ 5

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

Итак, я искал библиотеку, которая даст мне более эффективный процесс шифрования, и я нашел Slink. Slink использует библиотеку Facbook Conceal для сохранения всей карты объектов в целом, что делает ее наиболее эффективным и быстрым решением шифрования SharedPreferences. Он также использует общие интерфейсы Android SharedPreferences, что делает использование чрезвычайно простым и почти бесшовным. Отказ от ответственности: я являюсь частью группы разработчиков, разрабатывающей эту библиотеку.

Ответ 6

Попробуйте использовать https://github.com/BottleRocketStudios/Android-Vault компонент Vault. Он будет использовать Android Keystore (на поддерживаемых устройствах) или метод Obfuscation для шифрования значений в файле SharedPreference и реализует интерфейс SharedPreference, поэтому он в значительной степени заменяет замену.

Ответ 8

В этой статье о codeproject содержится хорошая оболочка для общих привилегий. Однако имя класса SecurePreferences вводит в заблуждение что-то вроде ObfuscatedPreferences.

Ответ 9

Для шифрования данных существует библиотека Android, которая использует Facebook Conceal.

https://github.com/rtoshiro/SecureSharedPreferences

Maven Central:

compile 'com.github.rtoshiro.securesharedpreferences:securesharedpreferences:1.0.+'

Ответ 10

Вы можете зашифровать данные в настройках и сохранить ключ шифрования в системе Android Keystore. Таким образом, ваш ключ шифрования будет также безопасным.

Вы можете посмотреть в библиотеку, которая делает это https://github.com/ophio/secure-preferences