Шифровать данные в SharedPreferences
В настоящее время я разрабатываю структуру для доступа к веб-сервисам oAuth 1 и 2, и мой вопрос заключается в том, как безопасным образом хранить конфиденциальные данные, такие как ключ доступа oAuth?
проблема с этими ключами в том, что на некоторых платформах, таких как твиттер, используется постоянный ключ, и если кто-то получит доступ к этому ключу, он сможет делать все, что захочет, с учетной записью пользователя twitter.
можно ли автоматически зашифровать данные до их сохранения в общих настройках? Или есть лучший способ/место для хранения очень важных данных?
ОБНОВЛЕНИЕ - ТАКЖЕ ПРОЧИТАЙТЕ: Каков наиболее подходящий способ хранения пользовательских настроек в приложении Android
Ответы
Ответ 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, используемого в другом предложении.
Ответ 3
См. дубликат: Возможно, файл Obfuscate/Encrypt SharedPreferences?
Привет, я создал реализацию SharedPreferences с использованием AES encryiption. Проект представляет собой модуль maven. Если вам это нужно, возьмите смотреть. https://github.com/kovmarci86/android-secure-preferences
Ответ 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, поэтому он в значительной степени заменяет замену.
Ответ 7
новое шифрование, введенное facebook - скрыть шифрование.. простой в использовании
https://github.com/afiqiqmal/ConcealSharedPreference-Android
Ответ 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