在 Swift 4 中从字符串对象创建 CFData 对象

Gab*_*mez 1 xcode ios swift swift4

根据 GDPR 要求,我使用 Apple 的内置“安全”模块来帮助加密和解密信息。我能够使用文档相当轻松地生成我的私钥和公钥。

我现在发现自己的问题是尝试进行加密时。在我正在关注的 Apple 文档(在此处找到)中,我能够进入 SecKeyCreateEncryptedData 函数步骤。我在说“plainText as CFData”的行中遇到错误。简单地说,我从 UITextField 接收一个 String 对象,并通过在我的 UITextField 对象之后添加“.text”来正确检索输入文本。

当你这样做时,Xcode 尖叫着必须使用“as!”强制向下转换一个 String 对象。如果我们想要它作为 CFData。所以我遵守了Xcode,都看到这行不通。我在文档说“plainText as CFData”的行上得到“Thread 1: EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)”。当我通过调试器查看它时,它是一大堆程序集,老实说,这超出了我的范围。

无论如何,这让我感到困惑,因为如果 String 不是文档所指的纯文本,那么什么是?我的直觉只是告诉我对 Swift 中的 CFData 是什么做一些研究,这样我就可以将我的 String 对象转换/创建到一个 CFData 对象中,然后简单地将它传递到参数中,而不需要在函数中转换它。那个搜索把我带到了这里,然后我找到了我认为是一个很好的解决方案在这里. 现在,我可能错了,这是一个很好的解决方法,但目前我能想到的只有这些。我现在被困在试图弄清楚我传递给 CFDataCreate 函数的参数是什么。我了解这些类型,但实际上没有任何示例(甚至在文档中也没有),我只是不知道如何获取它,或传入什么,以及如何以它需要的正确格式获取我的 String 对象.

感谢您的帮助,如果您对我有任何疑问,请提问

rob*_*off 7

在加密货币中,“明文”的意思是“未加密的数据”。它不一定是人类可读的文本。

您可以像这样将 a 转换String为 a CFData

let string = "Hello, world!"
let data = string.data(using: .utf8)! as CFData
Run Code Online (Sandbox Code Playgroud)