如何解决Android:检查金钥是否在安全硬体中
对于我的应用程序,我创建了一个AES密钥,并希望检查该密钥是否存储在安全硬件中。我在Google上搜索并找到了RSA的示例,但认为这没有关系。下面是我发现的RSA示例:
final KeyGenerator keyGenerator = KeyGenerator
.getInstance(KeyProperties.KEY_ALGORITHM_AES,"AndroidKeyStore");
final KeyGenParameterSpec keyGenParameterSpec = new KeyGenParameterSpec.Builder("key_alias",KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
.setBlockModes(KeyProperties.BLOCK_MODE_GCM)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
.build();
keyGenerator.init(keyGenParameterSpec);
final SecretKey secretKey = keyGenerator.generateKey();
final Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE,secretKey);
KeyFactory keyFactory = KeyFactory.getInstance(secretKey.getAlgorithm(),"AndroidKeyStore");
KeyInfo keyInfo = keyFactory.getKeySpec(secretKey,KeyInfo.class);
keyInfo.isInsideSecureHardware();
但是,第一行返回一个no such algorithm: AES for provider AndroidKeyStore
异常。但是难道不应该检查AES密钥是否也在AES的安全硬件中吗?
从理论上讲,我可以使用非对称加密,因为这只是我要加密/解密的一小段数据,但是如果我可以使用对称加密,我还是会更喜欢。
你们有个主意吗?
编辑:添加了更多实施细节。
解决方法
为了获取对称密钥的KeyInfo,需要以下代码:
SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(secretKey.getAlgorithm(),"AndroidKeyStore");
KeyInfo keyInfo = (KeyInfo) secretKeyFactory.getKeySpec(secretKey,KeyInfo.class);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。