2016-10-10 42 views
0

生成SecretKey的根据这个sample,我试图让SecretKeyAndroidKeyStore从AndroidKeyStore

KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore"); 
keyStore.load(null); 
SecretKey secretKey = (SecretKey) keyStore.getKey(KEY_NAME, null); 

但我得到这个异常:

android.security.keystore.AndroidKeyStoreRSAPrivateKey cannot be cast to javax.crypto.SecretKey 

这是怎么了我已创建的密钥:

KeyPairGeneratorSpec spec = new KeyPairGeneratorSpec.Builder(context) 
        .setAlias(KEY_NAME) 
        .setSubject(new X500Principal("CN=" + KEY_NAME)) 
        .setSerialNumber(BigInteger.valueOf(1337)) 
        .setStartDate(START_TIME) 
        .setEndDate(END_TIME) 
        .build(); 
KeyPairGenerator kpGenerator = KeyPairGenerator.getInstance("RSA", "AndroidKeyStore"); 
kpGenerator.initialize(spec); 
kpGenerator.generateKeyPair(); 

那么有什么办法可以产生e SecretKey from AndroidKeyStore

+0

'SecretKey'用于非对称密钥的对称密钥。 –

+0

@LukePark如何使用'AndroidKeyStore'生成对称密钥? –

回答

1

由于Android 6.0,你可以使用AndroidKeystore产生AES密钥:

KeyGenerator kg = KeyGenerator.getInstance("AES", "AndroidKeyStore"); 
kg.init(keySpec); 
SecretKey key = kg.generateKey(); 

欲了解更多详情,请参阅博客文章Keystore redesign in Android M(尼古拉Elenkov)。