4

我的 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

我相信这是由于我创建密钥的方式,这与之前删除的密钥不同......

我怎样才能解决这个问题 ?

谢谢 !

4

0 回答 0