无法将SecretKey转换为bytearray(java)

无法将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)

我试图获取生成的SecretKey的字节数组值,但结果总是空的

这是我的代码:

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密钥是不可提取的。您可以使用它们,但无法获取内容。