当前位置: 首页 > 知识库问答 >
问题:

Android:检查密钥是否在安全硬件中

后易安
2023-03-14

对于我的应用程序,我创建了一个AES密钥,并希望检查所述密钥是否存储在安全硬件中。我在谷歌上找到了一个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的安全硬件中吗?

你们有什么主意吗?

编辑:添加了进一步的实现详细信息。

共有1个答案

尉迟宣
2023-03-14

为了获取对称密钥的KeyInfo,需要以下代码:

SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance(secretKey.getAlgorithm(), "AndroidKeyStore");
KeyInfo keyInfo = (KeyInfo) secretKeyFactory.getKeySpec(secretKey, KeyInfo.class);
 类似资料:
  • 所以,我从服务器上获得了一些JSON值,但我不知道是否会有一个特定的字段。 比如: 有时,会有一个额外的字段,如: 我想检查名为“club”的字段是否存在,这样在解析时我就不会得到 组织。json。JSONException:俱乐部没有价值

  • 问题内容: 我陷入一种情况,我需要检查嵌套JSON对象中是否存在密钥。通过嵌套的JSON对象,我在父JSON对象中具有一个JSON对象作为其键之一的值。所以我需要检查此密钥是否存在于整个JSON对象中。我将以下数据作为对象。我知道我可以解析此对象以获得JSON对象。 我已经使用方法来检查主要JSON对象中密钥的存在,并且它可以工作。但是对于检查任何内部JSON对象(例如“ info”),我需要再次

  • 我不熟悉shell脚本,我有一个用于导入cert和使用keytool导入keystore的脚本。此脚本位于Pod中,有时我必须重新启动Pod,有时当此脚本运行时,我会出现此错误 现有条目别名服务器存在,覆盖?[no]:输入新别名(返回以取消此条目的导入): 我知道有命令列出别名 它给出了输出 服务器,2022年6月22日,PrivateKeyEntry,证书指纹(SHA-256):AC:DC:12

  • 问题内容: 我知道我可以在地图迭代的, 并寻找钥匙,但是有没有更有效的方法来测试地图中钥匙的存在? 我在语言规范中找不到答案。 问题答案: 一线回答: 说明: Go中的语句可以同时包含条件和初始化语句。上面的示例同时使用: 初始化两个变量- 将从映射中接收“ foo”的值或从“零值”(在这种情况下为空字符串)接收值,并且将收到一个布尔值,如果在映射中实际存在“ foo” ,则该布尔值将设置为 计算

  • 问题内容: 我想知道如何在Android中安全存储 加密密钥 吗?保护加密和秘密密钥的最佳方案是什么? 问题答案: 根据您的评论,您需要使用适用于当前Android版本和旧Android版本的本地密钥对数据进行加密 Android Keystore 旨在生成和保护您的密钥。但是它不适用于18级以下的API级别,并且在API 23级之前有一些限制。 您将需要一个随机对称加密密钥,例如AES。AES密