Неоднозначное использование ‘arrayOfBytes ()’

#ios #encryption #ios9 #nsdata #cryptoswift

#iOS #шифрование #ios9 #nsdata #cryptoswift

Вопрос:

Вот мой код :

  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. Это означает, что существует более одной функции с таким именем с похожей сигнатурой. Вам нужно будет как-то различать 2 (или более). Попробуйте найти другую версию и поместить ее за префиксом пространства имен.

2. Лучше избегать использования CryptoSwift, среди прочего, он в 500-1000 раз медленнее, чем обычные реализации на основе криптографии. Обычная криптография Apple сертифицирована FIPS и, как таковая, хорошо проверена, поэтому использование CryptoSwift повышает корректность и безопасность. Если вам нужна дополнительная безопасность, используйте RNCryptor , который доступен на нескольких языках для нескольких платформ. Он безопасен, хорошо проверен и находится в стадии текущей разработки / обслуживания. Он предоставляет все детали, такие как случайный iv, аутентификацию сообщений, расширение ключа и управление версиями для обеспечения надежной безопасности.

Ответ №1:

Если PusherSwift — это pusher-websocket-swift, то, похоже, они просто сбросили CryptoSwift прямо в свой модуль. Если вы также импортируете CryptoSwift напрямую, то они столкнутся. Это ошибка Pusher. Они не могут просто поместить другую библиотеку в свою собственную, не позаботившись о том, чтобы она не столкнулась.

Комментарии:

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