无法将SecretKey转换为bytearray(java)
我试图获取生成的SecretKey的字节数组值,但结果总是空的 这是我的代码:无法将SecretKey转换为bytearray(java),java,android,keystore,secret-key,Java,Android,Keystore,Secret Key,我试图获取生成的SecretKey的字节数组值,但结果总是空的 这是我的代码: mKeyStore = KeyStore.getInstance(ANDROID_KEYSTORE_PROVIDER); mKeyStore.load(null); KeyStore.SecretKeyEntry secretKeyEntry = null; if (!mKeyStore.containsAlias(KEY_ALIAS_AES)
mKeyStore = KeyStore.getInstance(ANDROID_KEYSTORE_PROVIDER);
mKeyStore.load(null);
KeyStore.SecretKeyEntry secretKeyEntry = null;
if (!mKeyStore.containsAlias(KEY_ALIAS_AES)) {
KeyGenerator keyGenerator = KeyGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_AES, ANDROID_KEYSTORE_PROVIDER);
KeyGenParameterSpec.Builder builder = null;
builder = new KeyGenParameterSpec.Builder(
KEY_ALIAS_AES,
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT);
builder.setBlockModes(KeyProperties.BLOCK_MODE_CBC)
.setKeySize(256);
keyGenerator.init(builder.build());
sKey = keyGenerator.generateKey();
secretKeyEntry = new KeyStore.SecretKeyEntry(sKey);
mKeyStore.setKeyEntry(KEY_ALIAS_AES, secretKeyEntry.getSecretKey().getEncoded(), null);
}
try {
tmpKey = mKeyStore.getKey(KEY_ALIAS_AES, null).getEncoded();
} catch (UnrecoverableKeyException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
} catch (CertificateException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (NoSuchProviderException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
tmpKey总是空的,有什么帮助吗?您已经丢弃了
generateKey()
的结果,并且您还没有将密钥添加到密钥库,因此当您尝试将其取出时,您失败了。感谢您的回答,sKey=keyGenerator.generateKey();secretKeyEntry=新密钥库。secretKeyEntry(sKey);mKeyStore.setKeyEntry(KEY_ALIAS_AES,secretKeyEntry.getSecretKey().getEncoded(),null);}尝试{tmpKey=mKeyStore.getKey(KEY_ALIAS_AES,null)。getEncoded();}结果总是null,我无法读取。没有人能。不要在评论中发布代码。将其编辑到您的问题中。什么是空值?getEncoded()
的结果是什么?为什么要存储密钥的编码,然后尝试获取编码的编码?为什么要将密钥恢复为字节数组而不是密钥
对象?AndroidKeystore密钥是不可提取的。您可以使用它们,但无法获取内容。您已经丢弃了generateKey()
的结果,并且还没有将密钥添加到密钥库中,因此,当您尝试获取密钥时,您会失败。感谢您的回答,sKey=keyGenerator.generateKey();secretKeyEntry=新密钥库。secretKeyEntry(sKey);mKeyStore.setKeyEntry(KEY_ALIAS_AES,secretKeyEntry.getSecretKey().getEncoded(),null);}尝试{tmpKey=mKeyStore.getKey(KEY_ALIAS_AES,null)。getEncoded();}结果总是null,我无法读取。没有人能。不要在评论中发布代码。将其编辑到您的问题中。什么是空值?getEncoded()
的结果是什么?为什么要存储密钥的编码,然后尝试获取编码的编码?为什么要将密钥恢复为字节数组而不是密钥
对象?AndroidKeystore密钥是不可提取的。您可以使用它们,但无法获取内容。