我想将秘密数据存储在我的应用程序的私钥库中。
但是,当我正在编写代码以执行此操作时,Android Studio 警告说KeyPairGeneratorSpec.Builder(context)
需要 API 级别 18,而我的目标是至少 14。:-(
如何在我的应用程序中存储适用于 Android API 级别 14 到 17 的秘密数据?
我想将秘密数据存储在我的应用程序的私钥库中。
但是,当我正在编写代码以执行此操作时,Android Studio 警告说KeyPairGeneratorSpec.Builder(context)
需要 API 级别 18,而我的目标是至少 14。:-(
如何在我的应用程序中存储适用于 Android API 级别 14 到 17 的秘密数据?
如您所见,通常由硬件支持(但不一定如此)的 AndroidKeyStore 在 API 级别 18 中正式引入,并在此处进行了描述:http: //developer.android.com/training/articles/keystore.html
Nikolay Elenkov 编写了一个不错的小应用程序来测试您可以在此处找到的 AndroidKeyStore:https ://github.com/nelenkov/android-keystore
如果您深入研究 AOSP,您可以使用一些技巧使其在 API 级别 17 上工作,但不能保证它可以在所有设备上工作,所以它有点毫无意义。在此之前,您绝对不会让它在任何事情上发挥作用。
实际上没有必要使用 AndroidKeyStore 来存储您的私钥,除非您对安全性极度偏执并要求它由硬件支持或在一个独立的进程中(非硬件支持的设备上的密钥库进程)。
如果您自己在应用程序中生成密钥对并将其保存在密钥库文件中到您的数据区域,则其他 Android 应用程序将无法读取您的密钥,这对于大多数应用程序来说足够安全。您甚至可以允许用户使用他们选择的密码来保护密钥库。
可以在此处找到有关使用 Java 和 Android 在软件中生成密钥对的一些很好的信息:
Android RSA 密钥对生成 - 我应该使用标准 Java/Bouncy Castle/Spongy Castle/JSch/其他吗?
https://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html