2016-10-10 43 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)。