来自keystore的secretkey的编码文本在android M中为null

时间:2015-08-21 13:42:46

标签: android android-keystore android-6.0-marshmallow

我需要实现256位AES加密,我引用这个 - http://nelenkov.blogspot.jp/2015/06/keystore-redesign-in-android-m.html KeyGenerator看起来像这样。

KeyGenerator keyGenerator = KeyGenerator
                    .getInstance(KeyProperties.KEY_ALGORITHM_AES,"AndroidKeyStore");
            KeyGenParameterSpec spec = new KeyGenParameterSpec.Builder(keyName,
                     KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)  

                     .setUserAuthenticationValidityDurationSeconds(5 *11160)
                     .build();
            keyGenerator.init(spec);
            SecretKey key1 =   keyGenerator.generateKey();

当我从keystore导入密钥的编码值时,它会向我返回null。

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
               keyStore.load(null); 
SecretKey key3 = (SecretKey) keyStore.getKey(keyName, null);
Log.d("Test MM",key3.getEncoded()+",");

我在logcat中找到了key3.getEncoded()的空值。请给我一些建议。

1 个答案:

答案 0 :(得分:6)

在密钥库中生成的对称密钥在Android M中是不可移植的。因此它的工作原理与预期完全相同。您仍然可以使用带有Cipher的密钥来加密/解密,但是您无法获得原始密钥字节。通常你应该要么。