Ios 如何使用Xcode对Swift中的字符串进行AES 128加密,并将其作为POST发送到服务器?

Ios 如何使用Xcode对Swift中的字符串进行AES 128加密,并将其作为POST发送到服务器?,ios,swift,xcode,encryption,aes,Ios,Swift,Xcode,Encryption,Aes,如何使用Xcode对Swift中的字符串进行AES 128加密并将其作为POST发送到服务器?。。。 我是Xcode新手,正在学习加密字符串数据并希望发送到HTTP服务器。它是一个基本的iOS应用程序,用于发送设备的纬度和经度。添加#导入到桥接头,然后使用以下命令: func encryptAES128(data: NSData, key: NSString, iv: NSString) -> NSData? { let keyPtr = UnsafeMutablePointer&

如何使用Xcode对Swift中的字符串进行AES 128加密并将其作为POST发送到服务器?。。。 我是Xcode新手,正在学习加密字符串数据并希望发送到HTTP服务器。它是一个基本的iOS应用程序,用于发送设备的纬度和经度。

添加
#导入到桥接头,然后使用以下命令:

func encryptAES128(data: NSData, key: NSString, iv: NSString) -> NSData? {
    let keyPtr = UnsafeMutablePointer<CChar>.allocate(capacity: Int(kCCKeySizeAES128) + 1)

    defer {
        keyPtr.deallocate(capacity: Int(kCCKeySizeAES128) + 1)
    }

    let ivPtr = iv.utf8String
    bzero(keyPtr, 0)
    key.getCString(keyPtr, maxLength: Int(kCCKeySizeAES128) + 1, encoding: String.Encoding.utf8.rawValue)

    let bufferSize = data.length + kCCBlockSizeAES128
    let buffer = UnsafeMutableRawPointer.allocate(bytes: bufferSize, alignedTo: MemoryLayout.alignment(ofValue: CChar.self))

    var numBytesEncrypted = 0

    let cryptStatus = CCCrypt(CCOperation(kCCEncrypt), CCAlgorithm(kCCAlgorithmAES128), CCOptions(kCCOptionPKCS7Padding), keyPtr, kCCKeySizeAES128, ivPtr, data.bytes, data.length, buffer, bufferSize, &numBytesEncrypted)

    if cryptStatus == kCCSuccess {
        return NSData(bytesNoCopy: buffer, length: numBytesEncrypted, freeWhenDone: true)
    }

    buffer.deallocate(bytes: bufferSize, alignedTo: MemoryLayout.alignment(ofValue: CChar.self))
    return nil
}
func encryptAES128(数据:NSData,密钥:NSString,iv:NSString)->NSData?{
let keyPtr=unsafemeutablepointer.allocate(容量:Int(kCCKeySizeAES128)+1)
推迟{
密钥释放(容量:Int(kCCKeySizeAES128)+1)
}
设ivPtr=iv.utf8String
bzero(按键,0)
key.getCString(keyPtr,maxLength:Int(kCCKeySizeAES128)+1,编码:String.encoding.utf8.rawValue)
让bufferSize=data.length+kCCBlockSizeAES128
let buffer=unsafemeutablerawpointer.allocate(字节:bufferSize,alignedTo:MemoryLayout.alignment(of值:CChar.self))
var numBytesEncrypted=0
让cryptStatus=CCCrypt(CCOperation(kccencencrypt)、ccalgorithmaes128)、CCOptions(kCCOptionPKCS7Padding)、keyPtr、kccckeysizeaes128、ivPtr、data.bytes、data.length、buffer、bufferSize和numbytes加密)
如果cryptStatus==kCCSuccess{
返回NSData(bytesNoCopy:缓冲区,长度:numBytesEncrypted,freeWhenDone:true)
}
释放(字节:bufferSize,对齐到:MemoryLayout.alignment(of value:CChar.self))
归零
}
要将其发送到服务器,请base64对结果进行编码,然后发送该结果。然后在服务器端,base64对结果进行解码并解密。

#导入到桥接头中,然后使用以下命令:

func encryptAES128(data: NSData, key: NSString, iv: NSString) -> NSData? {
    let keyPtr = UnsafeMutablePointer<CChar>.allocate(capacity: Int(kCCKeySizeAES128) + 1)

    defer {
        keyPtr.deallocate(capacity: Int(kCCKeySizeAES128) + 1)
    }

    let ivPtr = iv.utf8String
    bzero(keyPtr, 0)
    key.getCString(keyPtr, maxLength: Int(kCCKeySizeAES128) + 1, encoding: String.Encoding.utf8.rawValue)

    let bufferSize = data.length + kCCBlockSizeAES128
    let buffer = UnsafeMutableRawPointer.allocate(bytes: bufferSize, alignedTo: MemoryLayout.alignment(ofValue: CChar.self))

    var numBytesEncrypted = 0

    let cryptStatus = CCCrypt(CCOperation(kCCEncrypt), CCAlgorithm(kCCAlgorithmAES128), CCOptions(kCCOptionPKCS7Padding), keyPtr, kCCKeySizeAES128, ivPtr, data.bytes, data.length, buffer, bufferSize, &numBytesEncrypted)

    if cryptStatus == kCCSuccess {
        return NSData(bytesNoCopy: buffer, length: numBytesEncrypted, freeWhenDone: true)
    }

    buffer.deallocate(bytes: bufferSize, alignedTo: MemoryLayout.alignment(ofValue: CChar.self))
    return nil
}
func encryptAES128(数据:NSData,密钥:NSString,iv:NSString)->NSData?{
let keyPtr=unsafemeutablepointer.allocate(容量:Int(kCCKeySizeAES128)+1)
推迟{
密钥释放(容量:Int(kCCKeySizeAES128)+1)
}
设ivPtr=iv.utf8String
bzero(按键,0)
key.getCString(keyPtr,maxLength:Int(kCCKeySizeAES128)+1,编码:String.encoding.utf8.rawValue)
让bufferSize=data.length+kCCBlockSizeAES128
let buffer=unsafemeutablerawpointer.allocate(字节:bufferSize,alignedTo:MemoryLayout.alignment(of值:CChar.self))
var numBytesEncrypted=0
让cryptStatus=CCCrypt(CCOperation(kccencencrypt)、ccalgorithmaes128)、CCOptions(kCCOptionPKCS7Padding)、keyPtr、kccckeysizeaes128、ivPtr、data.bytes、data.length、buffer、bufferSize和numbytes加密)
如果cryptStatus==kCCSuccess{
返回NSData(bytesNoCopy:缓冲区,长度:numBytesEncrypted,freeWhenDone:true)
}
释放(字节:bufferSize,对齐到:MemoryLayout.alignment(of value:CChar.self))
归零
}
要将其发送到服务器,请base64对结果进行编码,然后发送该结果。然后在服务器端,base64对结果进行解码并解密。

基于以下示例:

要使用CryptoSwift加密字符串,请执行以下操作:

func encrypt(text: String) -> String?  {
    if let aes = try? AES(key: "passwordpassword", iv: "drowssapdrowssap"),
       let encrypted = try? aes.encrypt(Array(text.utf8)) {
        return encrypted.toHexString()
    }
    return nil
}
要解密:

func decrypt(hexString: String) -> String? {
    if let aes = try? AES(key: "passwordpassword", iv: "drowssapdrowssap"),
        let decrypted = try? aes.decrypt(Array<UInt8>(hex: hexString)) {
        return String(data: Data(bytes: decrypted), encoding: .utf8)
    }
    return nil
}
func解密(hexString:String)->String?{
如果让aes=try?aes(关键字:“passwordpassword”,iv:“DrowsAspDrowsSAP”),
let decrypted=try?aes.decrypt(数组(十六进制:十六进制字符串)){
返回字符串(数据:数据(字节:解密),编码:.utf8)
}
归零
}
要将值发送到服务器查找,请执行以下操作: 或者数千篇文章中的任意一篇,介绍如何向服务器发送数据。

基于以下示例:

要使用CryptoSwift加密字符串,请执行以下操作:

func encrypt(text: String) -> String?  {
    if let aes = try? AES(key: "passwordpassword", iv: "drowssapdrowssap"),
       let encrypted = try? aes.encrypt(Array(text.utf8)) {
        return encrypted.toHexString()
    }
    return nil
}
要解密:

func decrypt(hexString: String) -> String? {
    if let aes = try? AES(key: "passwordpassword", iv: "drowssapdrowssap"),
        let decrypted = try? aes.decrypt(Array<UInt8>(hex: hexString)) {
        return String(data: Data(bytes: decrypted), encoding: .utf8)
    }
    return nil
}
func解密(hexString:String)->String?{
如果让aes=try?aes(关键字:“passwordpassword”,iv:“DrowsAspDrowsSAP”),
let decrypted=try?aes.decrypt(数组(十六进制:十六进制字符串)){
返回字符串(数据:数据(字节:解密),编码:.utf8)
}
归零
}
要将值发送到服务器查找,请执行以下操作:
或者数千篇如何向服务器发送数据的帖子中的任何一篇。

我使用。检查此链接:我使用。检查此链接:我尝试了CryptoSwift,但在生成CryptoSwift文件时,它显示32个错误。您可能使用的CryptoSwift版本不受当前XCode/Swift版本的支持。据我所知,支持swift 3的最后一个CryptoSwift版本是0.6.9。您使用的是哪个Xcode版本?另外,我想知道,加密后的数据是否为二进制格式。您使用的是哪个版本的CryptoSwift?最新版本是0.7.2,它应该与Swift 4和Xcode 9配合使用。关于你最近的问题,我发布的加密函数返回一个可选字符串,该字符串可能是你希望通过网络发送它的字符串。你能告诉我加密返回的数据类型吗?我尝试了CryptoSwift,但在构建时,它显示了32个解密Cryptoswift文件的错误,您可能使用的Cryptoswift版本不受当前XCode/Swift版本的支持。据我所知,支持swift 3的最后一个CryptoSwift版本是0.6.9。您使用的是哪个Xcode版本?另外,我想知道,加密后的数据是否为二进制格式。您使用的是哪个版本的CryptoSwift?最新版本是0.7.2,它应该与Swift 4和Xcode 9配合使用。关于你最近的问题,我发布的加密函数返回一个可选字符串,该字符串可能是你希望用于通过网络发送它的字符串。你能告诉我加密返回的数据类型是什么吗这是Swift语言还是Objective C语言?因为如果你这么想的话,我需要帮助。我是swift的新手,在网上学习时,我总是感到困惑,因为一些网站写代码时没有提及其swift或Obj C。只是想要求确认。这是用swift语言还是客观C?因为如果你这么想的话,我需要帮助。我是swift的新手,在网上学习的时候,我总是感到困惑,因为有些网站写代码时没有提到它的swift或Obj C,只是想作为