iOS 13 AES 加密解密 Swift 不工作

iOS 13 AES decrypt with Crypto Swift not working

我有一个使用 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) 总是 returns 无...

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

任何帮助将不胜感激:)

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

接下来我要检查的是 Serializer.hexaToBytes 以确保它已正确实施并返回您期望的结果。

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