大多数应用开发者会将一些第三方库集成到他们的应用中.如果要访问服务,例如Dropbox或YouTube,或者用于记录崩溃.第三方图书馆和服务的数量是惊人的.大多数这些库和服务都是以某种方式通过服务进行身份验证而集成的,大部分时间都是通过API密钥进行的.出于安全目的,服务通常生成公共和私有(通常也称为秘密密钥).不幸的是,为了连接到服务,必须使用此私钥进行身份验证,因此可能是应用程序的一部分.毋庸置疑,这面临着巨大的安全问题.公共和私人API密钥可以在几分钟内从APK中提取,并且可以轻松实现自动化.
假设我有类似的东西,我该如何保护密钥:
public class DropboxService {
private final static String APP_KEY = "jk433g34hg3";
private final static String APP_SECRET = "987dwdqwdqw90";
private final static AccessType ACCESS_TYPE = AccessType.DROPBOX;
// SOME MORE CODE HERE
}
Run Code Online (Sandbox Code Playgroud)
您认为存储私钥的最佳和最安全的方式是什么?混淆,加密,你怎么看?
我想在清单文件中添加自定义属性/属性,并能够在运行时读取它.我想这样做,所以我可以通过这些清单属性自定义应用程序的行为.如何才能做到这一点?
我想在Android清单中使用元数据来自定义服务的行为.
<service
android:name=".SampleService"
android:exported="false">
<meta-data
android:name="sampleName"
android:resource="@string/sampleValue" />
</service>
Run Code Online (Sandbox Code Playgroud)
我的服务是库的一部分,有些人可能会在使用我的服务时将敏感数据放入这些属性中.即使服务未导出,这些元数据属性是否可通过PackageManager对手机上的其他已安装软件包可见?
service android metadata android-manifest android-package-managers