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