在Android API级别15+上进行AES-GCM加密;
我想在Android API 15+上进行AES-256-GCM加密。这是我的密码:在Android API级别15+上进行AES-GCM加密;,android,security,encryption,kotlin,aes,Android,Security,Encryption,Kotlin,Aes,我想在Android API 15+上进行AES-256-GCM加密。这是我的密码: 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 encr
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)
}
我有两个问题:
SecureRandom
漏洞IvParameterSpec
而不是GCMParameterSpec
可以吗?我使用的是Iv
版本,因为GcmParameterSpec
仅在API级别19+中可用。据我所知,唯一的区别是GCM版本允许我指定标记长度,但代码中的默认标记长度将是128,这似乎很好谢谢你的洞察力 根据Maarten的文章,你的第二个问题很好。对于第一个问题,你的链接实际上通过代码提供答案!