【发布时间】:2017-04-26 14:25:58
【问题描述】:
我需要在 SharedPreferences 中存储一些私人用户的值。
我看到了这篇文章: https://medium.com/@ericfu/securely-storing-secrets-in-an-android-application-501f030ae5a3
它解释了您必须做的大部分事情,但似乎缺少有关如何将私钥和公钥(用于 API
因此,如果我们有 API 版本 18-22,我们将执行以下操作: 我们打开一个密钥库
KeyStore keyStore = KeyStore.getInstance(AndroidKeyStore);
keyStore.load(null);
我们生成密钥对
Calendar start = Calendar.getInstance();
Calendar end = Calendar.getInstance();
end.add(Calendar.YEAR, 30);
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(mContext)
.setAlias(KEY_ALIAS)
.setSubject(new X500Principal("CN=" + KEY_ALIAS))
.setSerialNumber(BigInteger.TEN)
.setStartDate(start.getTime())
.setEndDate(end.getTime())
.build();
KeyPairGenerator kpg = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, AndroidKeyStore);
kpg.initialize(spec);
mEncryptionPair = kpg.generateKeyPair();
现在我们可以使用公钥加密数据,使用私钥解密。但是我们需要将密钥对保存到密钥库中,然后再检索它。 我该怎么做?
我也很关心为什么 Android Studio 会针对这一行显示警告
KeyPairGenerator kpg = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_RSA, AndroidKeyStore);
警告:
Field requires API level 23 (current min is 14): android.security.keystore.KeyProperties#KEY_ALGORITHM_RSA
【问题讨论】: