Вы сказали ...
Я также не хочу просить пользователя ввести ключ, я просто хочу, чтобы он работал самостоятельно.Поскольку я боюсь реверс-инжиниринга, я тоже не хочу вставлять в код ключ шифрования.
К сожалению, вам нужно сделать одну из этих вещей (ну, наверное).Вы можете запросить у пользователя пароль, а затем получить ключ от него с помощью алгоритма, разработанного для этой цели (это известно как шифрование на основе пароля - PBE - и Android включает в себя несколько хороших стандартов алгоритмов PBE).Вы можете сохранить ключ в своем коде или в качестве ресурса в вашем APK, но тогда кто-нибудь сможет его реконструировать.Вы можете сделать это и запутать свой код, что замедлит процесс обратного инжиниринга, но вы не можете сделать это невозможным (ваш код должен будет определить ключ в какой-то момент, так что это просто вопрос злоумышленника, выясняющего, как он работаетэто).
Другие подходы, которые были опробованы здесь, включают принудительное подключение вашего клиента к серверу для получения ключа по сети ... но что тогда произойдет, если подключение к сети будет прервано, а что помешает серверуот передачи ключа кому-либо, как злоумышленник?Что ж, тогда вы можете использовать SSL с взаимной аутентификацией, чтобы гарантировать, что только вашему клиенту разрешено его получать ... но тогда вам нужно хранить секретный ключ SSL на стороне клиента ... что точно та же проблема, что и у вас сейчас.:)
Итак ... суть в том, что вам нужен ключ (или что-то подобное) для шифрования / дешифрования данных.Вы можете хранить его и усложнить кому-то его обратный инжиниринг.Вы можете доставить неудобство пользователю и заставить его ввести пароль.Но ... тебе как-то нужны эти секретные знания.