Я немного затруднен в своем приложении для iOS (первое приложение для меня), я хочу зашифровать данные, которые отправляю на сервер.
Для этого я генерирую симметричный ключ, который храню в цепочке для ключей.
Ключ генерируется следующим образом:
SymmetricKey(data: password)
В этой функциипароль на самом деле является вычисленным SHA256, сделанным так: SHA256.hash(data: password)
, который дает мне дайджест, и из этого я извлекаю представление данных для создания моего ключа.
Теперь, когда я шифрую данные, я делаю следующее
var encryptedData: Data = Data()
if let key: SymmetricKey = try? readKey(account: encryptingKeyAccount){
encryptedData = try! ChaChaPoly.seal(rawData, using: key).combined
}
return encryptedData
Это возвращает мне данные, которые я затем отправляю на сервер.
Чтобы расшифровать данные, я делаю следующее:
var decryptedData: Data = Data()
if let key: SymmetricKey = try? readKey(account: encryptingKeyAccount) {
let sealedBox = try! ChaChaPoly.SealedBox(combined: encryptedData)
decryptedData = try! ChaChaPoly.open(sealedBox, using: key)
}
return decryptedData
Теперь моя проблема в том,если я выйду из системы (что означает удаление ключей с телефона) и снова войду в систему (которая, по моему мнению, воссоздает те же ключи, которые были созданы ранее), то я не смогу расшифровать свои данные ... У меня возникает следующая ошибка при попыткечтобы открыть окно:
Thread 1: Fatal error: 'try!' expression unexpectedly raised an error: CryptoKit.CryptoKitError.authenticationFailure
Мне кажется, это связано с тем, как я создаю ключ, который отличается от того, который был удален ранее ...
Как я могуисправить это?
Спасибо!