使用Crypto Swift的iOS 13 AES解密不起作用

时间:2019-10-01 18:51:54

标签: ios swift encryption aes cryptoswift

我有一个使用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)始终返回nil ...

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

任何帮助将不胜感激:)

1 个答案:

答案 0 :(得分:1)

这类问题的最常见原因是您正在使用Data.description来计算十六进制字符串的某个地方。那从来都不是正确的,但是有可能在iOS 13之前就放弃了。在iOS 13中,格式已更改(从未承诺过保持不变的格式),而很多依赖它的东西被打破了稳定。

接下来要检查的是Serializer.hexaToBytes,以确保其正确实施并返回您的期望。

鉴于此特定功能的编写方式不会仔细检查错误(并且使用ECB之类的非常危险的模式),因此相关功能也可能同样不小心出现错误。检查每个对象是否返回期望的值。