从 AndroidKeyStore 生成 SecretKey
Generate SecretKey from AndroidKeyStore
根据这个 sample,我试图从 AndroidKeyStore
:
得到 SecretKey
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();
那么有什么方法可以从 AndroidKeyStore
生成 SecretKey
吗?
从 Android 6.0 开始,您可以使用 AndroidKeystore:
生成 AES 密钥
KeyGenerator kg = KeyGenerator.getInstance("AES", "AndroidKeyStore");
kg.init(keySpec);
SecretKey key = kg.generateKey();
有关详细信息,请参阅博客 post Keystore redesign in Android M (作者:Nikolay Elenkov)。
根据这个 sample,我试图从 AndroidKeyStore
:
SecretKey
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();
那么有什么方法可以从 AndroidKeyStore
生成 SecretKey
吗?
从 Android 6.0 开始,您可以使用 AndroidKeystore:
生成 AES 密钥KeyGenerator kg = KeyGenerator.getInstance("AES", "AndroidKeyStore");
kg.init(keySpec);
SecretKey key = kg.generateKey();
有关详细信息,请参阅博客 post Keystore redesign in Android M (作者:Nikolay Elenkov)。