aes 128消息解密 – Swift,iOS

我试图用下面的代码128密钥解密消息。 这是string的扩展:

func aesDecrypt(key:String, iv:String, options:Int = kCCOptionPKCS7Padding) -> String? { if let keyData = key.dataUsingEncoding(NSUTF8StringEncoding), data = NSData(base64EncodedString: self, options: .IgnoreUnknownCharacters), 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.bytes, keyLength, nil, data.bytes, data.length, cryptData.mutableBytes, cryptData.length, &numBytesEncrypted) if UInt32(cryptStatus) == UInt32(kCCSuccess) { cryptData.length = Int(numBytesEncrypted) let unencryptedMessage = String(data: cryptData, encoding:NSUTF8StringEncoding) return unencryptedMessage } else { return nil } } return nil } 

对于input向量(iv),我使用零值。 有crypData存在,但我不能正确阅读这个, unencryptedMessage也是零。 在线工具通知数据不正确,但在后端工作正常。

键值和消息值是base64Url。

用法:

 let decryptedMessage = message.aesDecrypt(keyTodecrypt, iv: nil) 

Swift 2.3

正如罗布所说,主要问题是input数据。 所以,我已经将消息和密钥转换为hex值。 如果您遇到同样的问题,请确保您在客户端和后端的值具有相同的编码参数。 对我来说这是UTF-8。 另外,你应该检查密钥长度。