Одним из решений, если вы в конечном итоге используете KeyStore API, является генерация вашего пароля динамически во время выполнения каждый раз, когда приложение должно получить доступ к KeyStore. Если вы основываете свой алгоритм пароля на простой, но изменяемой переменной, связанной с конкретной установкой, такой как MEID устройства (или другой определенный идентификатор физического устройства, полученной во время выполнения), вы можете предоставить ключ блокировки, который становится все труднее подобрать.
Пример: используйте идентификатор с физического устройства, разрежьте три позиции и добавьте их в конечную позицию в строке идентификатора, а затем добавьте свои инициализации в строку программно. Я бы подумал, что этот подход даст слой безопасности, который не может быть легко сломан, если взломщик не знает, как вы создали ключ (т. Е. Имеет свой исходный код).
MEID = MEID + "fluffy" + "2008";
Где MEID это строка с некоторым ID из устройства, «пушистый» это имя из вашего лучших друзей кота, и «2008» является годом важного события в вашей жизни. Затем подайте эту новую строку в массив, проанализируйте число, которое вам подходит (например, в тот день, когда вы получили лицензию на свои драйверы), захватите три символа и опустите эти символы в конце строки. Закрепите переднюю часть строки до количества позиций, которые вам нужны для вашего ключа, и уходите. Это не должно быть очень сложной для процессора задачей, поэтому с некоторым кодом отказоустойчивости для переменных вы сможете запустить это в своем основном процессе даже из-за слишком большого беспокойства по поводу получения ANR из системы. Если вы действительно хотите получить froggy, преобразуйте строку в бит в какой-то момент и «побитовой op» изменения. Виола, низкий накладной, динамический ключ, который уникален для устройства, на котором он работает!
EDIT:
Как @RedWarp отметил, декомпилировать .apk всегда находится в пределах области possiblility для любого объектного кода с надлежащими инструментами и мотивации. Если «ключевое» поколение - действительно важный процесс, то абстрагирование ключевого гена вне сферы действия приложения является обязательным.
Настоящий момент, который я пытаюсь сделать с этим ответом, состоит в том, что мысль о минимальной безопасности может идти по пути. Более сильная защита более глубока, чем простой ответ от меня.
Ну, если вы храните данные в '/ данных/данных приложения/ /', то только то, что приложение может получить доступ к нему. Это неверно, если телефон укоренен. Но кроме этого, вы должны хорошо хранить данные паролей. –
Falmarri