Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我可以从具有已知别名的受密码(我不知道)保护的密钥库中获取密钥吗_Android_Android Keystore - Fatal编程技术网

Android 我可以从具有已知别名的受密码(我不知道)保护的密钥库中获取密钥吗

Android 我可以从具有已知别名的受密码(我不知道)保护的密钥库中获取密钥吗,android,android-keystore,Android,Android Keystore,我对安卓密钥库不是很熟悉。在我的项目中,我包含了以前创建的受密码保护的自定义密钥库,我需要从中提取项目中具有已知别名的密钥。我不想修改密钥或不想创建任何密钥。可能吗?我需要一些关于android密钥库的澄清。请帮助我了解这方面的情况。是的。您可以使用密钥别名获取密钥 看看这个代码 密钥存储仅用于保存加密密钥,不要在那里保存密码 private fun init() { keyStore = KeyStore.getInstance(AndroidKeyStore) keySto

我对安卓密钥库不是很熟悉。在我的项目中,我包含了以前创建的受密码保护的自定义密钥库,我需要从中提取项目中具有已知别名的密钥。我不想修改密钥或不想创建任何密钥。可能吗?我需要一些关于android密钥库的澄清。请帮助我了解这方面的情况。

是的。您可以使用密钥别名获取密钥 看看这个代码 密钥存储仅用于保存加密密钥,不要在那里保存密码

 private fun init() {
    keyStore = KeyStore.getInstance(AndroidKeyStore)
    keyStore.load(null)

    if (!keyStore.containsAlias(KEY_ALIAS)) {

        val keyGenerator: KeyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, AndroidKeyStore)
        keyGenerator.init(
                KeyGenParameterSpec.Builder(KEY_ALIAS, KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
                        .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
                        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
                        .build())

        keyGenerator.generateKey()
    }
}


override fun encrypt(byteArray: ByteArray): ByteArray {
    val keyStoreKey = keyStore.getKey(KEY_ALIAS, null)
    val cipher = Cipher.getInstance(AES_MODE)
    cipher.init(Cipher.ENCRYPT_MODE, keyStoreKey)
    val encodedBytes = cipher.doFinal(byteArray)
    val params = cipher.parameters
    val iv = params.getParameterSpec(GCMParameterSpec::class.java).iv
    saveIv(iv)

    return encodedBytes
}

override fun decrypt(byteArray: ByteArray): ByteArray {
    val iv = getIv()
    val ivSpec = GCMParameterSpec(128, iv)
    val keyStoreKey = keyStore.getKey(KEY_ALIAS, null) as SecretKey
    val cipher = Cipher.getInstance(AES_MODE)
    cipher.init(Cipher.DECRYPT_MODE, keyStoreKey, ivSpec)

    return cipher.doFinal(byteArray)
}
这是我对android API级别>=23的加密和解密
对于18>=API级别,您误解了我的问题,密钥库已经在某个地方创建并由密码保护。我只想得到一个已知别名的密钥。就这样。在那里读。您需要保存用于访问密钥库的密钥。