2016-10-03 51 views
0

這是我的代碼:歧義使用的 'arrayOfBytes()'

func aesEncrypt(key: String, iv: String) throws -> String 
{ 
    let data = self.dataUsingEncoding(NSUTF8StringEncoding) 

    let enc = try AES(key: key, iv: iv, blockMode:.CBC).encrypt(data!.arrayOfBytes()) 
    let encData = NSData(bytes: enc, length: Int(enc.count)) 
    let base64String: String = encData.base64EncodedStringWithOptions(NSDataBase64EncodingOptions(rawValue: 0)); 
    let result = String(base64String) 
    return result 
} 

func aesDecrypt(key: String, iv: String) throws -> String 
{ 
    let data = NSData(base64EncodedString: self, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters) 
    let dec = try AES(key: key, iv: iv, blockMode:.CBC).decrypt(data!.arrayOfBytes()) 
    let decData = NSData(bytes: dec, length: Int(dec.count)) 
    let result = NSString(data: decData, encoding: NSUTF8StringEncoding) 
    return String(result!) 
} 

線:

data!.arrayOfBytes() 

正在產生錯誤

歧義使用的「arrayOfBytes() '

。我查了類似的問題,但沒有一個幫助。

Xcode 7.3 Swift 2.2和Xcode 8.0 Swift 2.3上的錯誤perisist。

我註釋了Xcdoe 7.3中的PusherSwift框架,它工作。

我不確定它是錯誤還是我複製錯誤的東西。

+1

這意味着該名稱的多個函數具有類似的簽名。您需要以某種方式區分2個(或更多)。嘗試找到其他版本並將其放在名稱空間前綴後面。 – Carcigenicate

+1

最好避免使用CryptoSwift,其中比基於Common Crypto的實現慢500到1000倍。 Apple的Common Crypto已通過FIPS認證,並且經過充分審查,使用CryptoSwift正在考慮正確性和安全性。如果您需要更多的安全使用[RNCryptor](https://github.com/RNCryptor),可以在多種平臺上使用多種語言。它是安全的,經過充分審查並在當前的開發/維護之下。它提供了諸如隨機iv,消息認證,密鑰擴展和版本控制等所有細節以實現強大的安全性。 – zaph

回答

0

如果PusherSwift是pusher-websocket-swift,那麼它看起來像他們只是dropped CryptoSwift directly into their module。如果你也直接導入CryptoSwift,那麼它們會發生衝突。這是Pusher的錯誤。如果不特別注意它不會碰撞,他們不能將其他圖書館放入自己的圖書館。

+0

你是100%的權利。我無法相信......我甚至都不想用這個框架的工作。我不得不因爲這是一個項目需求,但自第1天起,現在就遇到了麻煩。我//導入PusherSwift後,所有工作都可以100%完成。 – Darkwonder