繁体   English   中英

KeyStore没有返回正确的密钥

[英]KeyStore doesn't return correct key

我正在尝试在Android KeyStore中存储AES密钥:

        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:尝试获取空数组的长度

为什么?

存储在AndroidKeyStore中的密钥是不可提取的,因此任何获取密钥内容的尝试secretKey.getEncoded()例如存储密钥上的secretKey.getEncoded()必须失败。

这是AndroidKeyStore的安全措施。 可以使用键,但是键材料没有暴露。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM