【问题标题】:can i get the key from a password (unknow to me) protected keystore with known alias我可以从具有已知别名的密码(我不知道)受保护的密钥库中获取密钥吗
【发布时间】:2018-07-31 15:50:32
【问题描述】:

我对 android keystore 不是很熟悉。在我的项目中,我包含了以前创建的受密码保护的自定义密钥库,我需要从中提取具有已知别名的项目中的密钥。我不想修改密钥或不想创建任何密钥。是否可以?我需要对 android 密钥库进行一些说明。请帮助我解决这个问题。

【问题讨论】:

    标签: android android-keystore


    【解决方案1】:

    是的。您可以使用密钥别名获取密钥 看看这段代码 密钥库仅用于保存加密密钥,请勿将密码保存在那里!!!

     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 级别

    【讨论】:

    • 您误解了我的问题,密钥库已经在某处创建并受密码保护。我只想获取知道别名的密钥。就是这样。
    • stackoverflow.com/questions/18589694/… 在那里阅读。您需要保存用于访问密钥库的密钥。
    猜你喜欢
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-24
    • 2017-02-26
    • 2012-02-12
    • 2011-02-01
    • 1970-01-01
    相关资源
    最近更新 更多