【问题标题】:Decryption error on image data in AndoridAndroid中图像数据的解密错误
【发布时间】: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


【解决方案1】:

Android 密钥库不是线程安全的。当您使用Android keystore 加密和解密大块数据时,您需要将方法标记为synchronized

其实所有与Android keystore相关的方法,都需要确保它们是线程安全的。

【讨论】:

猜你喜欢
  • 2011-10-12
  • 1970-01-01
  • 1970-01-01
  • 2012-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多