Шифрование AES не работает, когда Xcode 10.1 переключается на Xcode 10.2, 10.3, 11.0 - PullRequest
0 голосов
/ 28 октября 2019

Мое приложение использует шифрование AES 128. Он работает нормально, когда я использую Xcode 10.1 или ниже, но не дает желаемого результата, когда я переключаю Xcode 10.1 на Xcode 10.2, 10.3, 11.0.

Вот код, используемый для шифрования:

func aesEncrypt (_ message: String) -> String {
    let keyString        = "!#$a54?3!@##qwQBE59@GH136745b3A4"
    let keyData: Data! = (keyString as NSString).data(using: String.Encoding.utf8.rawValue)

    var keyBytes : UnsafePointer<CChar>! //        = UnsafeMutableRawPointer(mutating: abc)

    keyData.withUnsafeBytes {(bytes: UnsafePointer<CChar>)->Void in
        //Use `bytes` inside this closure
        //...
        keyBytes = bytes
    }

    let data: Data! = (message as NSString).data(using: String.Encoding.utf8.rawValue)
    let dataLength    = size_t(data.count)
    var dataBytes : UnsafePointer<CChar>!

    data.withUnsafeBytes {(dBytes: UnsafePointer<CChar>)->Void in
        //Use `bytes` inside this closure
        //...
        dataBytes = dBytes
    }

    let iv   : [UInt8]  = [ 10, 20, 30, 40, 50, 60, 70, 80, 10, 20, 30, 40, 50, 60, 70, 80 ]

    let cryptData    = NSMutableData(length: Int(dataLength*2) + kCCBlockSizeAES128)
    let cryptPointer = cryptData!.mutableBytes
    let cryptLength  = size_t(cryptData!.length)

    let operation: CCOperation = UInt32(kCCEncrypt)
    let algoritm:  CCAlgorithm = UInt32(kCCAlgorithmAES128)
    let options:   CCOptions   = UInt32(kCCOptionPKCS7Padding)
    let keyLength              = size_t(keyData.count)

    var numBytesEncrypted :size_t = 0

    let cryptStatus = CCCrypt(operation,
                              algoritm,
                              options,
                              keyBytes, keyLength,
                              iv,
                              dataBytes, dataLength,
                              cryptPointer, cryptLength,
                              &numBytesEncrypted)

    if UInt32(cryptStatus) == UInt32(kCCSuccess) {
        //  let x: UInt = numBytesEncrypted
        cryptData!.length = Int(numBytesEncrypted)

        // Not all data is a UTF-8 string so Base64 is used
        let base64cryptString = cryptData!.base64EncodedString(options: Data.Base64EncodingOptions.lineLength64Characters)//Base64.encode(cryptData! as Data)
        return base64cryptString

    } else {

        return ""
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...