删除并重新创建对称密钥(iOS)后打开chachapoly密封盒?

Sir*_*rae 5 encryption symmetric-key swift apple-cryptokit

我在 iOS 应用程序(我的第一个应用程序)上遇到了一些障碍,我想加密发送到服务器的数据。

为此,我生成一个存储在钥匙串中的对称密钥。

密钥通过以下方式生成:

SymmetricKey(data: password)
Run Code Online (Sandbox Code Playgroud)

在此函数中,密码实际上是计算得出的 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
Run Code Online (Sandbox Code Playgroud)

这会返回我然后发送到服务器的数据。

为了解密数据,我执行以下操作:

    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
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,如果我注销(这意味着从手机中删除密钥)并重新登录(在我看来,这会重新创建之前创建的相同密钥),那么我将无法解密我的数据......我有当我尝试打开盒子时出现以下错误:

Thread 1: Fatal error: 'try!' expression unexpectedly raised an error: CryptoKit.CryptoKitError.authenticationFailure
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢 !