在Android应用程序中存储密钥的最佳方式

时间:2014-04-29 02:45:03

标签: android security parse-platform secret-key

我有一个Parse帐户,我用它来存储我的Android应用程序的用户数据。因为我正在使用源代码控制,所以我不想将我的密钥隐藏在代码中。有没有办法让一个“配置”文件,我将不受源代码控制,然后可以托管密钥?如果这不可行,那么处理这种情况的最佳做法是什么?

2 个答案:

答案 0 :(得分:1)

是的,您可以在源代码管理之外创建一个文件夹,在其中放置一个名为app.properties的文件,将您的密钥放在该属性文件中,然后将该文件夹添加到您的构建路径中。然后使用属性加载器从类路径加载它。

如果您有许多开发人员或多个开发人员计算机,则可以将本地属性位置设置为构建路径中的变量,以便每个开发人员都可以自行配置。

答案 1 :(得分:1)

一种选择是将密钥放在环境变量中,然后在构建期间读取它。

你的pom.xml中的

声明了一个属性(secret.key)

<properties>
   <secretKey>${env.SECRET_KEY}</secretKey>
<properties>

进一步向下启用资源上的“filtering

  <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
  </resource>

在资源中维护一个“config.properties”来读取变量ready for substitution:

secret_key=${secretKey}

在maven中过滤将使用环境变量中的值替换$ {secret.key}。

如果您使用gradle进行Android版本的构建,请参阅16.6.6.2 on filtering files部分。

在build.gradle中添加以下内容

import org.apache.tools.ant.filters.FixCrLfFilter
import org.apache.tools.ant.filters.ReplaceTokens

task copyProductionConfig(type: Copy) {
  from 'source'
  include 'config.properties'
  into 'build/targetpath/config'
  expand([
    secretKey: System.getenv("SECRET_KEY")

  ])
}

在gradle中,您还可以在使用

运行gradlew时请求输入
Console console = System.console()
def password = console.readPassword("Enter Secret Key: ")

然后将其应用于相应的配置或源文件。