【问题标题】:Android KeyStore InitializationAndroid KeyStore 初始化
【发布时间】:2015-03-02 07:04:37
【问题描述】:

首先我是安卓编程的新手,虽然我对编程本身并不陌生。本质上,我要做的是将我的加密密钥保存到 Android 密钥库中。 GOOGLE 本身似乎非常缺乏此类信息。由于该主题没有太多可用的操作方法,我假设它不是相当标准的知识。所以有人可以给我一个示例代码

  1. 初始化 KeyStore(将使用 AES-256)。
  2. 在一个 KeyStore 中保存多个密钥(请告诉我我可以在 1 个 KeyStore 中存储的最大密钥数量,因为我计划保存的密钥少于 100 个)。
  3. 从 KeyStore 获取密钥。
  4. 编辑键
  5. 删除密钥
  6. 删除整个密钥库

所以本质上是密钥库所有基本功能的代码。 提前感谢您的帮助。

【问题讨论】:

标签: android encryption cryptography aes keystore


【解决方案1】:

如果您将 minSdkVersion 设置为 23 或更高版本,Android M 从本月开始可以轻松生成和管理对称密钥。

查看此处列出的第四个示例。 https://developer.android.com/reference/android/security/keystore/KeyGenParameterSpec.html

 KeyGenerator keyGenerator = KeyGenerator.getInstance(
         KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
 keyGenerator.init(
         new KeyGenParameterSpec.Builder("key2",
                 KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
                 .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
                 .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
                 .build());
 SecretKey key = keyGenerator.generateKey();

 Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
 cipher.init(Cipher.ENCRYPT_MODE, key);
 ...

 // The key can also be obtained from the Android Keystore any time as follows:
 KeyStore keyStore = KeyStore.getInstance("AndroidKeyStore");
 keyStore.load(null);
 key = (SecretKey) keyStore.getKey("key2", null);

这个例子也很有帮助。 https://github.com/googlesamples/android-ConfirmCredential/blob/master/Application/src/main/java/com/example/android/confirmcredential/MainActivity.java

【讨论】:

  • 如果您想使用相同的解决方案同时支持旧设备(即 API 18)和新设备(API 23+)怎么办?
  • 好久没碰这个了,但据我所知没有好的解决办法。
  • 它应该是keyGenerator.init 而不是keyGenerator.initialize。 KeyGenerator 没有 initialize() 这样的方法。 initialize() 方法在 KeyPairGenerator 中
【解决方案2】:

我认为 Android Key Store 不支持 AES 密钥等对称密钥。请参考here。顺便说一句,为什么应用程序需要这么多对称密钥?我建议您在密钥库中存储一个主非对称密钥,并使用此密钥加密您应用中的许多其他对称密钥。 希望您能尽快解决您的问题。

【讨论】:

  • 从 Marshmallow(Android 6 / API 级别 23)开始支持 Android KeyStore 中的对称密钥生成和存储。请参阅here 了解更多信息。
猜你喜欢
  • 2018-08-24
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-14
  • 2019-08-14
  • 2011-05-08
  • 2023-03-13
相关资源
最近更新 更多