0

我有一个使用 AES256 解密进行身份验证的应用程序。为此,我使用Crypto Swift库。

直到现在它一直有效,但随着 iOS 13 的推出,解密不起作用。

这是我用于解密的代码:

func aesDecrypt(key: String) throws -> String {
    let data = Serializer.hexaToBytes(self)
    let key = Serializer.hexaToBytes(key)
    let decrypted = try! AES(key: key, blockMode: ECB(), padding: .pkcs7).decrypt(data)
    let decryptedData = Data(decrypted)
    return String(bytes: decryptedData.bytes, encoding: .utf8) ?? "Could not decrypt"
}

String(bytes: decryptedData.bytes, encoding: .utf8)总是返回零...

为什么会这样,我应该怎么做才能让它再次工作?

任何帮助,将不胜感激 :)

4

1 回答 1

1

此类问题的最常见原因是您正在使用某处Data.description计算十六进制字符串。这从来都不是正确的,但在 iOS 13 之前有可能摆脱它。在 iOS 13 中,格式发生了变化(格式从未承诺保持不变),这破坏了很多依赖它的东西稳定的。

我要检查的下一件事是Serializer.hexaToBytes确保它正确实施并返回您所期望的。

鉴于此特定函数的编写方式没有仔细检查错误(并且使用了像 ECB 这样的非常危险的模式),因此相关函数可能同样对错误不小心。检查每个以查看它是否返回您期望的值。

于 2019-10-01T18:59:29.713 回答