首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含在Cocoa框架中时隐藏.json文件

包含在Cocoa框架中时隐藏.json文件
EN

Stack Overflow用户
提问于 2017-09-05 17:35:52
回答 3查看 447关注 0票数 22

我想发布一个可可触摸框架,包括一些包含逻辑的json文件,我不希望框架的用户看到;不幸的是,在.framework文件中仍然可以看到json。

我想把它写进一个快速的档案里:

代码语言:javascript
复制
struct JsonProvider {
    static let json = "..."
}

但是我的json太大了,文件不能再使用了。我没有找到命令行编译然后包含它的解决方案。

这两个问题之一有解决办法吗?

  • 将json隐藏在框架内或
  • 预编译一个快速文件,然后将它添加到框架中?
EN

回答 3

Stack Overflow用户

发布于 2021-11-03 20:57:51

这个问题的答案实际上取决于您需要该文件的安全性。没有什么是100%安全的,但您可以使攻击者或多或少地难以获得访问权限。

选项A:隐藏文件

加一个'.‘在文件名的开头,这将对那些不知道隐藏文件的目录进行隐藏。

注意事项:

  • 任何知道隐藏文件的人都能弄清楚这一点。

选项B:模糊化

使用Base64或其他编码方法对文件进行编码。

注意事项:

  • 只会使懒惰的人望而却步。编码很容易被打败。

选项C:加密或存储在代码

使用对称算法(如AES )对文件进行加密,并将密码存储在代码中。

或者,删除json文件并在代码中创建一个包含json的字符串的变量。

代码语言:javascript
复制
var myJson = """
{
 "jsonData": "value"
}
"""

注意事项:

  • 可以对代码进行反编译以显示硬编码的字符串,但这很困难。有人将不得不访问您的.ipa文件,这是受苹果的数字版权保护。您也可以选择对字符串进行编码,但是如果已经有人正在对您的代码进行反编译,那么他们就可以找到克服混淆的方法。

选项D:不要在所有中包含文件

这是一个非常宽泛的主题,超出了您的问题范围,但本质上您在某个地方保存了您的文件。您在哪里和如何这样做同样取决于您需要数据的安全性。理想情况下,通过HTTPS为数据提供服务,并阻止自签名证书在应用程序中使用,这样它就不能被代理(即中间的人)。

URLSession已经在这方面做得很好了,但是您可以通过使用证书钉扎:https://developer.apple.com/news/?id=g9ejcf8y来更进一步。

本质上,您可以在服务器上创建证书配置,并将公钥捆绑在应用程序中,除非满足固定要求,否则连接将被拒绝。请注意,无论证书何时更改,您都必须更新应用程序。

票数 1
EN

Stack Overflow用户

发布于 2020-07-03 13:52:29

有很多种方式:

  • 在使用之前,您可以再次加密该文件结束解密。
  • 将json文件类型更改为图片或其他内容,以确保没有人知道这是JSON文件。
票数 0
EN

Stack Overflow用户

发布于 2017-09-06 08:24:26

您可以将json文件内容作为base64编码的字符串添加到源中。

代码语言:javascript
复制
struct JSONFiles {
    internal static let fileOneBase64String = "iVBORw0KGgoAAAANSUhEUgAAAMEAAADLCAYAAADX..."
    static var fileOneJSON: [String: Any] {
        let data = Data(base64Encoded: fileOneBase64String)!
        return try! JSONSerialization.jsonObject(with: data, options: []) as!  [String: Any]
    }
}

您以后可以在框架中的任何地方使用它。

代码语言:javascript
复制
print(JSONFiles.fileOneJSON)

希望它能帮到你

更新:为什么是base64编码的字符串?

base64编码字符串的主要好处是无需转义包含在JSON中的特殊符号。在添加到快速源文件之前,不需要从json字符串中删除新的行符号/引导符号。见示例

代码语言:javascript
复制
let string: String = "{ \"name\":\"John\", \"email\": \"hello@stackoverflow\" \"age\":30, \"car\":null }"

但是如果json更复杂呢?如果它包含10个嵌套级别,数组,字典?

您可以通过UnitTests将fileOneBase64String中包含的值解码为JSON对象

代码语言:javascript
复制
import XCTest
@testable import MyAwesomeFramework

class FrameworkTests: XCTestCase {

    func testThatBase64EncodedJSONStringCanBeDecoded() {
        let data = Data(base64Encoded: JSONFiles.fileOneBase64String)
        XCTAssertNotNil(data, "Unable to convert base64 string to Data")
        do {
            _ = try JSONSerialization.jsonObject(with: data, options: [])
        } catch {
            XCTFail("Expected decoded JSON ")
        }
    }
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46060507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档