0

我是 SwiftUI(iOS App Ver 14.x)的新手,因为我通常使用 Xamarin。

在这种情况下,我需要专门用 SwiftUI 编写应用程序。(我知道有些东西仍然需要 UIKit)。

尽管我一般来说很难掌握在哪里以及如何存储东西,但我已经对此有所了解。

例如(大大简化)让我们说我想要以下内容:

都在同一个视图中。

两个表单域:

名字:……姓氏:……</p>

一个按钮,上面写着“添加照片”。

一个按钮,上面写着“本地保存”(不适用,但仅供参考,稍后将上传到在某些时候并不总是可用的 Web 服务)。

现在做所有标准的东西,这很简单。

但。

我想加密表单输入(一旦转换为 JSON,请注意我可以很容易地转换为 JSON)。

我还想在存储图像之前对其进行加密。(真正的应用程序有多个图像)。

这些东西将在真正的应用程序中使用非对称加密进行加密(我理解得很好,这在这里也不那么重要)。

但是为了举例,我很高兴将 JSON 和图片作为两个单独的文件“加密”,使用一些简单的东西来展示这个想法。异或它或一些简单的东西。

我的问题是,如果可能的话,最好的地方是用一些基本的例子来做这件事。我知道这有点主观,但只是简单而明显的事情。单击按钮,运行此功能,执行此类操作等。

我在哪里存放东西(我到处都能找到)?老实说,这是我困惑的主要来源。

我的理解是您将使用 FileManager 对象和文档目录(尽管我不确定这是否是最佳实践,甚至是正确的位置。

客户的要求是,出于合规性原因,没有任何内容未加密存储(完全忽略 Apple 的任何好或坏)。

4

1 回答 1

0

是的,您可以使用文件管理器将其存储在文档文件夹中:

FileManager.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)[0]

至于加密,如果您在将数据写入磁盘之前对其进行加密,那么它们就会被加密......

一个问题是加密密钥也必须安全存储。为此,我通常在第一次使用时生成密钥并将其存储在钥匙串中。对代码中的密钥进行硬编码并不安全,因为它使所有用户的密钥都相同,并且可以(不确定有多容易)对二进制文件进行逆向工程。我们必须相信 Apple 的钥匙串是安全的。一些越狱检查也可能有助于听到。

另请注意,与其他应用程序数据(用户默认值、文件等)不同,重新安装应用程序时不会清除钥匙串!!!这可能是头痛的主要来源。如果需要,您可以通过在安装后第一次运行应用程序时运行一段代码来清除钥匙串来解决此问题(例如,通过在 UserDefaults 中保留一个标志,在重新安装应用程序时清除该标志)。

于 2021-06-14T06:58:58.053 回答