【问题标题】:Android KeyStore get raw bytes/string of stored keyAndroid KeyStore 获取存储密钥的原始字节/字符串
【发布时间】:2017-11-14 22:13:52
【问题描述】:

我可以像这样生成一个存储在 Android Keystore 中的密钥:

private static final String AndroidKeyStore = "AndroidKeyStore";
private static final String AES_MODE = "AES/GCM/NoPadding";
keyStore = KeyStore.getInstance(AndroidKeyStore);
keyStore.load(null);

if (!keyStore.containsAlias(KEY_ALIAS)) {
    KeyGenerator keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, AndroidKeyStore);
    keyGenerator.init(
            new KeyGenParameterSpec.Builder(KEY_ALIAS,
                    KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT)
                    .setBlockModes(KeyProperties.BLOCK_MODE_GCM)                   .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
                    .setRandomizedEncryptionRequired(false) 
                    .build());
    keyGenerator.generateKey();
}

同样,我可以这样检索它:

keyStore.getKey(KEY_ALIAS, null);

我知道 getKey() 函数返回一个 Key 对象,但我还没有找到一种方法来显示密钥本身。它似乎没有 toString() 或 getBytes() 或类似的东西。

如何获取密钥的字节,或者至少打印出它的字符串版本?有没有可能?

【问题讨论】:

    标签: android encryption key android-keystore


    【解决方案1】:

    “AndroidKeyStore”专门设计用于使这不可能或至少非常困难。有更完整的讨论here,但总结一下:

    Android Keystore 系统可保护密钥材料免遭未经授权的使用。 首先,Android Keystore 减少了对密钥材料的未经授权的使用 通过防止提取密钥在 Android 设备之外 来自应用程序进程和 Android 设备的材料作为 整个。

    继续您的示例,以下附加代码行:

    Key key = keyStore.getKey(KEY_ALIAS, null);
    String algorithm = key.getAlgorithm();
    String format = key.getFormat();
    byte[] encoded = key.getEncoded();
    

    应该使 key 成为对 Key 对象的有效非空引用,algorithm 应该返回“AES”,但 format 应该是 nullencoded 也应该如此。

    【讨论】:

      【解决方案2】:

      返回的 Key 对象有方法:

      getAlgorithm()
      getEncoded()
      getFormat()
      

      它们分别返回 String、byte[] 和 String。

      点击here了解更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-02-05
        • 2020-07-09
        • 1970-01-01
        • 1970-01-01
        • 2021-09-01
        • 2015-12-20
        • 1970-01-01
        相关资源
        最近更新 更多