Выполнение шифрования AES-GCM на Android API уровня 15+ - PullRequest
2 голосов
/ 30 сентября 2019

Я хочу сделать шифрование AES-256-GCM на Android API 15+. Вот мой код:

import android.util.Base64
import java.security.SecureRandom
import javax.crypto.Cipher
import javax.crypto.SecretKey
import javax.crypto.spec.SecretKeySpec
import javax.crypto.spec.IvParameterSpec

fun encryptGCM(key: String, plaintext: String): String {
  val decodedKey = Base64.decode(key, 0)
  val secretKey: SecretKey = SecretKeySpec(decodedKey, 0, decodedKey.size, "AES")

  val secureRandom = SecureRandom()
  val iv = ByteArray(12)
  secureRandom.nextBytes(iv)
  val cipher = Cipher.getInstance("AES/GCM/NoPadding")
  cipher.init(Cipher.ENCRYPT_MODE, secretKey, IvParameterSpec(iv))
  val cipherText: ByteArray = cipher.doFinal(plaintext.toByteArray())

  return Base64.encodeToString(iv + cipherText, 0)
}

У меня есть два вопроса:

  1. Так как я нацеливаюсь на pre v4.4, мне нужно беспокоиться о SecureRandom Уязвимость в этом посте, учитывая мой вариант использования? https://android -developers.googleblog.com / 2013/08 / some-securerandom-ideas.html

  2. Используется IvParameterSpec вместо GCMParameterSpec отлично? Я использую версию Iv, потому что GcmParameterSpec доступен только на уровне API 19+. Насколько я понимаю, единственное отличие заключается в том, что версия GCM позволяет мне указывать длину тега, но длина тега по умолчанию в моем коде будет 128, что кажется нормальным.

Спасибодля любого понимания!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...