2017-09-28 28 views

回答

1

添加#import <CommonCrypto/CommonCryptor.h>到您的桥接报头,然后使用以下命令:

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 
} 

将其发送到服务器,基于64位编码的结果,并发送。然后在服务器端,base64解码结果并解密。基于从实例

+0

这是Swift语言还是Objective C?因为我需要SWIFT帮助 –

+0

@MuhammadJamaal有什么问题呢?这是一个笑话吗? – Brandon

+0

对不起,如果你这么想。我是新手,在网上学习的同时,我总是感到困惑,因为有些网站编写的代码没有提及它的Swift或Obj C.只是想要确认。 –

1

https://github.com/krzyzanowskim/CryptoSwift

要使用加密字符串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 
} 

要发送的值的服务器查询: HTTP Request in Swift with POST method或数千个帖子中的任何一个如何将数据发送到服务器。

+1

我试过了CryptoSwift,但是在构建时,它显示了减少Cryptoswift文件中的32个错误 –

+0

您可能使用了当前XCode/Swift版本不支持的CryptoSwift版本。就我所知,支持swift 3的最后一个CryptoSwift版本是0.6.9。你使用哪种Xcode版本? –

+0

我正在使用Xcode 9.0(9A235)。 –

相关问题