1 张图片
作者
描述
当我们正在开发包含大量敏感信息的应用(如银行应用等)时,我们应该非常小心地处理字符串。下面有很好的文章解释了原因(https://www.raywenderlich.com/2666-ios-app-security-and-analysis-part-1-2)。
为了防止可能敏感数据泄露,长时间将某些字符串以纯文本形式存储在应用内存中并不好。我想为字符串创建一个混淆包装器。此类包装器的目的是防止敏感数据始终以未混淆的形式存在于内存中。它将被传递到需要字符串的类和函数中,并且在包装器被摧毁后,底层混淆数据必须完全从内存中清除。同时,也可以使用不同的混淆算法。
在运行游乐场或测试目标之前,需要选择并构建“MGObfuscate”目标。由于它使用了CommonCrpto,该项目只能与 Xcode 10 编译(CommonCrpto 之前的版本并未提供)。我尚未编译CommonCrpto(我可能会稍后这样做)。有关为旧版本编译的链接,请参考此链接(https://stackoverflow.com/questions/25248598/importing-commoncrypto-in-a-swift-framework)。
功能:当用户输入PIN/密码时,我们将提供盐和算法类型作为初始化器。它会快速获取密码并生成DrivedKey(PBKDF2的盐扩展散列)。如果我们不想用户再次输入PIN(通常不适用于银行应用),我们可以将其保存在钥匙串中。
加密函数:public func encriptAndPurge(inputString: inout String) -> Data。它接受参数并从派生密钥快速提供加密数据。原始字符串在加密后将被删除。
解密函数:public func decript(data: Data, result: (String) -> Void)。它提供了一个包含解密字符串的回调。字符串的作用域仅限于闭包。要进一步使用,用户必须将其保存到某个变量中。