簡體   English   中英

aes 128消息解密-Swift,iOS

[英]aes 128 message decryption — 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
}

對於輸入向量(iv),我使用nil值。 有crypData存在,但我無法正確讀取它, unencryptedMessage也為零。 聯機工具會通知數據不正確,但是在后端,它可以正常工作。

鍵值和消息值是base64Url。

用法:

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

迅捷2.3

正如Rob所說,主要問題是輸入數據。 因此,我已將消息和密鑰轉換為十六進制值。 如果您遇到相同的問題,請確保您在客戶端和后端的值具有相同的編碼參數。 對我來說是UTF-8。 另外,您應該檢查密鑰長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM