Расшифровать закодированную в base64 и зашифрованную строку с помощью RNCryptor

Я новичок в RNCryptor, но мне дали образец строки, которая зашифрована и закодирована в base64. Я пытаюсь использовать функцию расшифровки RNCryptor, чтобы увидеть строку в виде обычного текста.

Я пробовал следующее:

func decryptStr(_ sample : String){

    let sampleBase64Decoded = sample.fromBase64Data()

    do {
        let decryptedNSData = try RNCryptor.decrypt(data: sampleBase64Decoded!, withPassword: "secretPass")
        let decryptedNSString = NSString(data: decryptedNSData, encoding: String.Encoding.utf8.rawValue)
        print("decrypted : \(decryptedNSString)")
    }
    catch let error as NSError {
        print("issue decrypting :\(error.localizedDescription)")
    }

}

и я называю это так:

decryptStr("R79gQDNTt/0+cjU7pduqfA==")

а fromBase64 выглядит так:

extension String {

func fromBase64() -> String? {
    guard let data = Data(base64Encoded: self, options: NSData.Base64DecodingOptions(rawValue: 0)) else {
        return nil
    }

    return String(data: data, encoding: String.Encoding.utf8)!
}

}

Я получаю сообщение об ошибке connect.RNCryptor.Error 2. Почему это может быть? Связано ли это каким-либо образом с тем фактом, что строка закодирована как по основанию 64, так и зашифрована?

Пароль правильный.


person user2363025    schedule 10.01.2017    source источник
comment
Как было сделано шифрование? Обратите внимание, что RNCryptor имеет собственный формат, он предназначен для взаимодействия с данными, зашифрованными RNCryptor.   -  person zaph    schedule 10.01.2017


Ответы (1)


Ваши данные Base-64 (R79gQDNTt/0+cjU7pduqfA==) не являются сообщением RNCryptor (первый байт неверный и слишком короткий).

Для шифрования AES не существует «стандартного» формата. Вы должны сопоставить дешифратор с шифровальщиком. RNCryptor реализует особый формат, обеспечивающий важные преимущества безопасности, которые отсутствуют в большинстве специализированных решений. Если эти данные поступают с сервера, вам также нужно будет использовать реализацию RNCryptor или переписать свой код Swift для реализации любого формата, который использует ваш сервер (это выглядит как специальный пользовательский формат, поэтому я не могу сказать как это реализовать).

person Rob Napier    schedule 10.01.2017
comment
Я скоро свяжусь с серверщиком и спрошу, использовал ли он RNCryptor. Похоже, он не должен иметь! - person user2363025; 11.01.2017
comment
Просто чтобы уточнить, зашифрована ли строка с помощью RNCryptor PHP, смогу ли я расшифровать ее с помощью RNCryptor swift? - person user2363025; 12.01.2017
comment
Верный; RNCryptor — это формат. Существуют реализации примерно на дюжине языков. - person Rob Napier; 12.01.2017