Небезопасные криптографические c шаблоны шифрования - PullRequest
0 голосов
/ 11 апреля 2020

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")

}
...