2017-09-28 112 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)。 –

相關問題