0

我的 iOS 应用程序使用 AES 加密创建一个密钥并将其与所有 API 一起发送,并且它正在服务器端被解密,现在在更新 OS 13.4 之后,从设备(而不是模拟器)创建的密钥不正确,并且服务器抛出以下错误: “填充无效,无法删除。”

它在 13.4 OS 版本以下的设备上运行良好,我们最终使用CommonCrypto来加密密钥,以下是详细信息:

  let ivData = "passpharse".data(using:String.Encoding.utf8)!
  let cryptLength  = size_t(data.count + kCCBlockSizeAES128)
  var cryptData = Data(count:cryptLength
  let keyLength = size_t(kCCKeySizeAES128)
  let options   = CCOptions(kCCOptionPKCS7Padding)
  var numBytesEncrypted :size_t = 0

令人惊讶的是,尽管使用相同的方法生成密钥,但为某些 API 调用正确生成了密钥。

iOS-OS 低于 13.4 的用户没有遇到任何问题,如果有人遇到过同样的情况,请指导。

提前致谢。

4

1 回答 1

3

经过大量研究,我使它适用于所有版本。如果在上面的代码中“passphrase”短于 16 个字节,它会使用内存中的任何内容。似乎对 CommonCrypto API 的不当使用是这里的问题。真的不知道以前为什么会这样,但也许我们对内存布局很幸运,但上述问题需要解决,然后才能按预期运行。

于 2020-09-30T12:18:13.353 回答