Как обезопасить пароль, используемый для Greendao с базой данных SQLcipher в Android?

Я хочу защитить пароль, используемый для базы данных Greendao с помощью SQLCipher. Я использую хранилище ключей для генерации ключа и использую этот ключ для шифрования пароля, получаемого с сервера. Я хочу использовать зашифрованные данные в качестве пароля для базы данных. Проблема заключается в шифровании каждый раз, когда генерируются разные зашифрованные данные. (Я знаю, что это работает, как ожидалось). Есть ли способ генерировать зашифрованные данные, подобные каждый раз? Я использую следующий код для шифрования: -

 private fun generateSecureKey() {
    val keyGenerator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore")
    val keyGenParameterSpec = KeyGenParameterSpec.Builder(BuildConfig.APPLICATION_ID,
            KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT)
            .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
            .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
            .setRandomizedEncryptionRequired(false)
            .build()
    keyGenerator.init(keyGenParameterSpec)
    keyGenerator.generateKey()
}

private fun getSecureKeyFromKeyStore(): SecretKey {
    val keyStore = KeyStore.getInstance("AndroidKeyStore")
    keyStore.load(null)
    return if (keyStore.containsAlias(BuildConfig.APPLICATION_ID)) {
        val secretKeyEntry = keyStore.getEntry(BuildConfig.APPLICATION_ID, null) as KeyStore.SecretKeyEntry
        secretKeyEntry.secretKey
    } else {
        generateSecureKey()
        val secretKeyEntry = keyStore.getEntry(BuildConfig.APPLICATION_ID, null) as KeyStore.SecretKeyEntry
        secretKeyEntry.secretKey
    }
}

private fun encryptData(secureData: String): String {

    val cipher = Cipher.getInstance("AES/GCM/NoPadding")
    cipher.init(Cipher.ENCRYPT_MODE, getSecureKeyFromKeyStore())
    val bytes = cipher.doFinal(secureData.toByteArray())
    return Base64.encodeToString(bytes, Base64.DEFAULT)
}

0 ответов

Другие вопросы по тегам