Мое приложение использует шифрование 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 ""
}
}