我有一个使用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 ...
为什么会这样,我应该怎么做才能使其再次工作?
任何帮助将不胜感激:)
答案 0 :(得分:1)
这类问题的最常见原因是您正在使用Data.description
来计算十六进制字符串的某个地方。那从来都不是正确的,但是有可能在iOS 13之前就放弃了。在iOS 13中,格式已更改(从未承诺过保持不变的格式),而很多依赖它的东西被打破了稳定。
接下来要检查的是Serializer.hexaToBytes
,以确保其正确实施并返回您的期望。
鉴于此特定功能的编写方式不会仔细检查错误(并且使用ECB之类的非常危险的模式),因此相关功能也可能同样不小心出现错误。检查每个对象是否返回期望的值。