Google Play считает, что я использую статический тип секретного ключа из-за функции, указанной ниже, в качестве параметра «пароль» для секретного ключа. Я просто передаю мастер-пароль в функцию шифрования, а пароль фактически извлекается из зашифрованных общих настроек. Здесь никогда не бывает жестко закодированного секретного ключа или данных c.
Я в замешательстве, поскольку есть еще несколько похожих функций шифрования без каких-либо ошибок, только эта, которую Google Play указывает на ошибку.
Это ложное предположение о конце Гугла? Мне так кажется.
// Cipher function with return function with String data form
fun cipherFinal (myList: MutableList<String>? = null, password: String? = null): MutableList<String>?
{
// Generate secret key from password by calling the keyGen function
val tempList = mutableListOf<String>()
try {
val key = keyGen(password)
val c = Cipher.getInstance(aes)
val iv = ByteArray(c.blockSize)
val ivParams = IvParameterSpec(iv)
c.init(Cipher.ENCRYPT_MODE, key, ivParams)
myList!!.listIterator().forEach {
val encVal = c.doFinal(it.toByteArray())
val encValString = Base64.encodeToString(encVal, Base64.DEFAULT)
tempList.add(encValString)
}
// Return encrypted value in string format
return tempList
} catch (e: UnsupportedEncodingException) {
Log.d("cipherFinal", e.message.toString())
} catch (e: IllegalBlockSizeException) {
Log.d("cipherFinal", e.message.toString())
} catch (e: BadPaddingException) {
Log.d("cipherFinal", e.message.toString())
} catch (e: InvalidKeyException) {
Log.d("cipherFinal", e.message.toString())
} catch (e: NoSuchPaddingException) {
Log.d("cipherFinal", e.message.toString())
} catch (e: NoSuchAlgorithmException) {
Log.d("cipherFinal", e.message.toString())
} catch (e: ShortBufferException) {
Log.d("cipherFinal", e.message.toString())
} catch (e: NullPointerException) {
Log.d("cipherFinal", e.message.toString())
} catch (e: IllegalArgumentException) {
Log.d("cipherFinal", e.message.toString())
}
return null
}
// Generate secret key function for SecretKeySpec data form
private fun keyGen(password: String? = null): SecretKeySpec {
val digest = MessageDigest.getInstance("SHA-256")
// Transform password to UTF-8 byte array format
val bytes = password!!.toByteArray(Charsets.UTF_8)
digest.update(bytes, 0, bytes.size)
val key = digest.digest()
// Return SecretKeySpec data
return SecretKeySpec(key, "AES")
}