2015-12-29 2 views
-1

Я поставил вопрос раньше, используя CryptoSwift как библиотеку, чтобы делать вещи для меня, но это не получилось хорошо. Поэтому я планировал изменить библиотеку, которая может предоставить более универсальные опции, чем CryptoSwift.RNCryptor iOS Swift Расшифровка данных с сервера

В настоящее время это информация, которую я должен получить расшифрованное сообщение. - Строка с кодировкой Base64, возвращаемая с сервера. - Соль - Ключ

Но когда я проверил реализацию для RNCryptor, я немного смущен тем, что как применять материал, который должен получить соответствующий результат. Это то, что я в настоящее время имея:

let saltData = SALT_KEY.dataUsingEncoding(NSUTF8StringEncoding); 

    let keyData = RNCryptor.FormatV3.keyForPassword(PRIVATE_KEY, salt: saltData!); 

    let hmacKey = RNCryptor.randomDataOfLength(RNCryptor.FormatV3.keySize); 

    let decryptor = RNCryptor.DecryptorV3(encryptionKey: keyData, hmacKey: hmacKey); 

    let encodedData = encryptedToken.dataUsingEncoding(NSUTF8StringEncoding); 
    let base64DecodedData = NSData(base64EncodedData: encodedData!, options: NSDataBase64DecodingOptions.IgnoreUnknownCharacters); 
    var decryptedData:NSData?; 
    do { 
     decryptedData = try decryptor.decryptData(base64DecodedData!); 
    } 
    catch _{ 
     print("Error"); 
    } 

    print("Decrypted Data: \(String(data: decryptedData!, encoding: NSUTF8StringEncoding))"); 

    print("Key Data: \(keyData.length)"); 

Значение расшифрованных данных, кажется, ноль. Может кто-то просто указать, что я делаю неправильно здесь.

Зашифрованный токен зашифрован в .NET с использованием шифрования HMACSHA1.

Любые советы или предложения очень ценятся.

+0

CryptoSwift, помимо других вещей, в 500-1000 раз медленнее, чем Common Crypto, но это может не иметь значения для вашего использования. Common Crypto от Apple является сертифицированным FIPS и, как таковой, был хорошо проверен, CryptoSwift не является ни тем, ни другим. – zaph

ответ

1

CryptoSwift - это универсальная библиотека шифрования, которая может использоваться для создания любого формата шифрования. Это зависит от вас, чтобы этот формат был безопасным (очень легко создать небезопасный формат).

RNCryptor реализует specific encryption format, который предназначен для обеспечения безопасности и удобства использования. Он не предназначен для дешифрования произвольных форматов шифрования. (См. FAQ.) Реализация формата RNCryptor на C# доступна в пакете RNCryptor-cs.

Вы в настоящее время выбрасываете ошибку, которую бросает RNCryptor. Если вы его изучили, я уверен, что он жалуется, что это не похоже на данные RNCryptor.

Ваш код дешифрования не имеет смысла в любом случае. Вы передаете случайный ключ HMAC. Не существует способа, который соответствует ключу HMAC, используемому на сервере. Хотя случайные значения очень важны в коде шифрования, случайное значение в коде дешифрования никогда не может быть правильным.

Обратите внимание, что HMAC-SHA1 не является алгоритмом шифрования. Это алгоритм хеширования. Невозможно расшифровать HMAC-SHA1. Он может быть проверен только с помощью ключа HMAC. (Я считаю, что мы только что обсуждали это on the forum, но я хотел бы предоставить дополнительную информацию.)

CryptoSwift гораздо более универсален, чем RNCryptor. Это по дизайну. Один из них является общим, другой пытается сделать для вас все тяжелые части. Что вы обнаружили в CryptoSwift, что вам нужно для реализации вашего алгоритма? Вы обсуждали с Марсином?