aes 128消息解密 - Swift,iOS

时间:2017-04-17 14:37:12

标签: ios swift encryption aes commoncrypto

我尝试使用以下代码使用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
}

对于输入向量(iv),我使用nil值。 有crypData存在,但我无法正确阅读, unencryptedMessage 也是零。在线工具通知数据不正确,但在后端方面它工作正常。

键值和消息值是base64Url。

用法:

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

Swift 2.3

1 个答案:

答案 0 :(得分:0)

Rob说,主要问题是输入数据。所以,我已将消息和密钥转换为十六进制值。如果遇到同样的问题,请确保客户端和后端的值具有相同的编码参数。对我来说它是UTF-8。 此外,您应该检查密钥长度。