Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos SWIFT4中AES解密产生空值_Macos_Encryption_Swift4 - Fatal编程技术网

Macos SWIFT4中AES解密产生空值

Macos SWIFT4中AES解密产生空值,macos,encryption,swift4,Macos,Encryption,Swift4,我使用一个扩展方法来解密一个字符串,该字符串由服务器端php脚本使用AES算法加密 下面是使用的扩展方法 func aesDecrypt(key:String, iv:String, options:Int = kCCOptionPKCS7Padding) -> String? { if let keyData = key.data(using: String.Encoding.utf8), let data = NSData(base64Encod

我使用一个扩展方法来解密一个字符串,该字符串由服务器端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不是空的


请注意

您是否总是使用相同的密钥(如果是,长度是多少)和相同的iv?发生时cryptStatus的值是多少?我已将此代码替换为cryptoswift,感谢您的帮助。您是否仍在寻找此问题的解决方案???