macos - SWIFT4中的AES解密产生空值
问题描述
我正在使用扩展方法来解密由服务器端 php 脚本使用 AES 算法加密的字符串。
以下是使用的扩展方法
func aesDecrypt(key:String, iv:String, options:Int = kCCOptionPKCS7Padding) -> String? {
if let keyData = key.data(using: String.Encoding.utf8),
let data = NSData(base64Encoded: self, options: .ignoreUnknownCharacters),
let cryptData = NSMutableData(length: Int((data.length)) + kCCBlockSizeAES128) {
let keyLength = size_t(kCCKeySizeAES128)
let operation: CCOperation = UInt32(kCCDecrypt)
let algoritm: CCAlgorithm = UInt32(kCCAlgorithmAES128)
let options: CCOptions = UInt32(options)
var numBytesEncrypted :size_t = 0
let cryptStatus = CCCrypt(operation,
algoritm,
options,
(keyData as NSData).bytes, keyLength,
iv,
data.bytes, data.length,
cryptData.mutableBytes, cryptData.length,
&numBytesEncrypted)
if UInt32(cryptStatus) == UInt32(kCCSuccess) {
cryptData.length = Int(numBytesEncrypted)
let unencryptedMessage = String(data: cryptData as Data, encoding:String.Encoding.utf8)
return unencryptedMessage
}
else {
return nil
}
}
return nil
}
这有时会返回一个空值
unencode = responseString?.aesDecrypt(key: "mykey", iv: "value");
我无法弄清楚发生这种情况的确切原因。发生这种情况时,responseString 不为空。
请指教
解决方案
推荐阅读
- mysql - MySQL 5.7 使用的内存比指定的多(在 LinuxMint 19 中)
- php - 如何在用户文本字段输入后自动添加值
- java - Drools - KieServices.Factory.get() 返回 null
- reactjs - undefined 不是对象(评估 RNGestureHandlerModule.State)
- java - 将 Java 链接到 Neo4J 服务器
- android - BeanInstanceCreationException:无法为 Single 创建定义
- mongodb - 官方 MongoDB Scala 驱动程序,聚合计数和 1
- curl - 这是一个 curl POST 调用吗?
- angular - 将 JSON 属性分配给连接的可观察数组(Typescript)
- docker - Docker Swarm 和 Kubernetes 如何验证他们的管理选择?