2016-10-03 10 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.

Я прокомментировал структуру PusherSwift в Xcdoe 7.3, и это сработало.

Я не уверен, что это ошибка или что-то, что я скопировал неправильно.

+1

Это означает, что существует более одной функции этого имени с аналогичной подписью. Вам нужно будет провести различие между двумя (или более). Попробуйте найти другую версию и поместить ее за префикс пространства имен. – Carcigenicate

+1

Лучше всего избегать использования CryptoSwift, среди прочего, оно в 500-1000 раз медленнее, чем реализация на основе Common Crypto. Common Crypto от Apple является сертифицированным FIPS и, как таковой, был хорошо проверен, использование CryptoSwift дает шанс на правильность и безопасность. Если вам требуется больше средств безопасности, используйте [RNCryptor] (https://github.com/RNCryptor), который доступен на нескольких языках для нескольких платформ. Он безопасен, хорошо проверен и находится под текущей разработкой/обслуживанием. Он обеспечивает все детали, такие как случайный iv, аутентификация сообщения, расширение ключа и управление версиями для обеспечения безопасности. – zaph

ответ

0

Если PusherSwift - pusher-websocket-swift, то похоже, что они просто dropped CryptoSwift directly into their module. Если вы также импортируете CryptoSwift напрямую, они будут сталкиваться. Это ошибка Пушера. Они не могут просто оставить другую библиотеку самостоятельно, не обращая особого внимания на то, что она не столкнется.

+0

Вы были на 100% прав. Я не могу в это поверить ... Я даже не хотел работать с этим фреймворком. Я должен был, так как это требование проекта, но у меня были проблемы с ним с первого дня, и теперь это. После I // import PusherSwift все работает на 100%. – Darkwonder