【发布时间】:2018-04-15 13:25:27
【问题描述】:
我正在尝试将 AES 密钥存储在 Android KeyStore 中:
String alias = "alias7";
KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
keyStore.load(null);
KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES);
keyGenerator.init(256);
SecretKey secretKey = keyGenerator.generateKey();
if (!keyStore.containsAlias(alias)) {
keyStore.setEntry(
alias,
new KeyStore.SecretKeyEntry(secretKey),
new KeyProtection.Builder(KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.build());
}
System.out.println(keyStore.getKey(alias, null));
SecretKey storedSecretKey = ((KeyStore.SecretKeyEntry) keyStore.getEntry(alias, null)).getSecretKey();
System.out.println(secretKey.toString());
System.out.println(secretKey.getAlgorithm());
System.out.println(secretKey.getEncoded().length);
System.out.println('-');
System.out.println(storedSecretKey.toString());
System.out.println(storedSecretKey.getAlgorithm());
System.out.println(storedSecretKey.getEncoded().length);
在我的日志中:
I/System.out:android.security.keystore.AndroidKeyStoreSecretKey@51abbd87
I/System.out: javax.crypto.spec.SecretKeySpec@fffe879c
I/System.out:AES
I/System.out: 32
I/System.out:-
I/System.out:android.security.keystore.AndroidKeyStoreSecretKey@51abbd87
I/System.out:AES
最后一个 System.out.println() 没有返回“32”——它会抛出一个错误:
java.lang.NullPointerException: 尝试获取空数组的长度
为什么?
【问题讨论】: