我的 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
我相信这是由于我创建密钥的方式,这与之前删除的密钥不同......
我怎样才能解决这个问题 ?
谢谢 !