Android хранит ключи API в выделенном файле классов и строк

Каковы плюсы и минусы хранения ключей приложения для таких вещей, как аутентификация API, в классе в виде статических переменных

public class Keys {

   public static final int APP_KEY = 4848jffj48j89489;

}

против хранения их в файле строк

<string name="app_key">4848jffj48j89489</string>

Я могу представить некоторые соображения по поводу памяти и преимущества их хранения в файле строк (только доступ к переменным при необходимости), но я не уверен, что это оставляет ключи доступными для просмотра, если APK был декомпилирован/извлечен.

Точно так же я не уверен во всех последствиях использования статических переменных, я думаю, что они не будут занимать много памяти, но я не уверен, могут ли они быть собраны мусором и возвращать ноль, или ключи могут быть выставлены в APK, который был декомпилирован/извлечен

В любом случае, возможно, я пропустил некоторые другие вещи, поэтому любое понимание ценится.


person CQM    schedule 30.01.2014    source источник
comment
Ключи доступны для просмотра при декомпиляции apk независимо от используемого метода.   -  person njzk2    schedule 30.01.2014
comment
@njzk2 proguard поможет с этим, верно?   -  person CQM    schedule 30.01.2014


Ответы (3)


Рассмотрите возможность использования Android Keychain или KeyStore, если вы используете API 14 или новее. http://developer.android.com/reference/android/security/KeyChain.html http://developer.android.com/reference/java/security/KeyStore.html

person Paul Dardeau    schedule 30.01.2014
comment
Я, я не понимаю явных преимуществ перед другими методами, можно поподробнее? - person CQM; 30.01.2014
comment
Если вы беспокоитесь о том, что кто-то может декомпилировать и получить доступ к вашим ключам API, шифрование может быть оправдано. Я не использовал Android Keychain/KeyStore, но похоже, что он может работать для хранения ключей API с помощью SecretKeyEntry: developer.android.com/reference/java/security/ - person Paul Dardeau; 30.01.2014

По моему опыту, два метода, о которых вы спрашиваете, работают более или менее одинаково. На мой взгляд, к статической переменной немного проще получить доступ. Сбор мусора не должен быть проблемой. В любом случае для любого человека было бы тривиально открыть ваш apk и вынуть ключ, хранящийся таким образом. Использование Android Keychain или Keystore, как предлагается, дает вам преимущество в том, что ваш ключ скрыт от всех, кроме самых решительных (к сожалению, нет ничего полностью безопасного) за счет некоторой сложности.

person jdanielson    schedule 30.01.2014

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

person Footjy    schedule 07.10.2014