зашифровать данные в SharedPreferences - PullRequest
31 голосов
/ 06 февраля 2011

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

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

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

Ответы [ 10 ]

50 голосов
/ 04 июня 2012

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

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

32 голосов
/ 06 февраля 2011

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

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

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

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

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

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

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

3 голосов
/ 07 ноября 2016

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

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

3 голосов
/ 16 мая 2015

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

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

2 голосов
/ 02 февраля 2013

См. Дубликат: Возможно, файл обфускации / шифрования SharedPreferences?

Привет, я создал реализацию SharedPreferences, используя AES encryiption. Проект представляет собой модуль Maven. Если вам нужно, возьмите смотреть. https://github.com/kovmarci86/android-secure-preferences

1 голос
/ 07 апреля 2017

новое шифрование введено на Facebook - скрыть шифрование .. простота в использовании

https://github.com/afiqiqmal/ConcealSharedPreference-Android

1 голос
/ 22 апреля 2016

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

0 голосов
/ 29 июня 2015

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

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

0 голосов
/ 12 июня 2015

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

https://github.com/rtoshiro/SecureSharedPreferences

Maven Central:

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

0 голосов
/ 29 мая 2013

Эта статья в codeproject содержит приятную оболочку для общих префов. Однако имя класса SecurePreferences вводит в заблуждение что-то вроде ObfuscatedPreferences более подходящее.

...