【发布时间】:2020-07-24 10:04:48
【问题描述】:
我正在尝试使用以下代码加密和解密图像。
问题是,只要图像大小超过 400KB(大约取决于设备),我就会在解密时收到 AEADBadTagException。
加密:
val cipher = Cipher.getInstance("AES/GCM/NoPadding")
val iv = ByteArray(12)
val random = SecureRandom()
random.nextBytes(iv)
val spec = GCMParameterSpec(128, iv)
cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(), spec)
val ivCTAndTag = ByteArray(12 + cipher.getOutputSize(valueToEncrypt.size))
System.arraycopy(iv, 0, ivCTAndTag, 0, 12)
val valueToDecrypt = cipher.doFinal(valueToEncrypt, 0, valueToEncrypt.size, ivCTAndTag, 12)
解密:
val cipher = Cipher.getInstance("AES/GCM/NoPadding")
val spec = GCMParameterSpec(128, valueToDecrypt, 0, 12)
cipher.init(Cipher.DECRYPT_MODE, getSecretKey(), spec)
cipher.doFinal(valueToDecrypt, 12, valueToDecrypt.size - 12)
【问题讨论】:
-
很抱歉。已添加。
-
还是不行。你记得/知道MCVE吗?
-
解密时,“valueToDecrypt”从何而来?看来这应该与“ivAndCTWithTag”相同
-
是的,没错。我现在编辑了它。
标签: android image kotlin encryption cryptography