我一直在使用密鑰庫來生成RSA密鑰對,並且代碼一直在爲API級別18-22工作。 今天,當我在API-23上運行它時,我無法從密鑰庫中檢索私鑰。 下面是我一直使用的代碼:私鑰在API-23(棉花糖)中沒有生成
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。看看[Android的AndroidKeyStore的文檔](http://developer.android.com/training/articles/keystore.html),似乎是正確的行爲。 –