Я использую хранилище ключей для генерации ключа/пары RSA, и код работает для уровней API 18-22. Сегодня, когда я запускал его на API-23, я не смог получить закрытый ключ из хранилища ключей. Ниже приведен код, который я использую:Закрытый ключ не генерируется в API-23 (Marshmallow)
KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(context)
.setAlias(utility.getConfigValue(configuration, OuterKeys.KEYSTORE_NAME))
.setSubject(
new X500Principal("CN=Sample Name, O=Android Authority"))
.setSerialNumber(BigInteger.ONE).setStartDate(start.getTime())
.setEndDate(end.getTime()).build();
KeyPairGenerator generator = null;
generator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore");
generator.initialize(spec);
KeyPair keyPair = generator.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
PublicKey publicKey = keyPair.getPublic();
byte[] publicKeyBytes = publicKey.getEncoded();
String pubKeyStr = Base64.encodeToString(publicKeyBytes, Base64.NO_PADDING);
byte[] privKeyBytes = privateKey.getEncoded();
String privKeyStr = Base64.encodeToString(privKeyBytes, Base64.NO_PADDING);
Log.d("^^^^^^^^^1",pubKeyStr);
Log.d("^^^^^^^^^2",privKeyStr);
Я отлажена это и обнаружил, что закрытый ключ, является недействительным. Принимая во внимание, что я могу напечатать строку открытого ключа по мере ее извлечения. Может кто-нибудь помочь, пожалуйста.
Вы имеете в виду, что вы изменили целевую версию sdk на 23 или что вы используете ее на устройстве Android 6.0? – 1615903
Я запускаю его на устройстве 6.0. – Sid
'PrivateKey.getEncoded()' разрешено возвращать значение null. Глядя на [docs для AndroidKeyStore] (http://developer.android.com/training/articles/keystore.html), похожее на правильное поведение. –