在目标C中,如何获得OSX文件夹及其内容(也可能有几个子文件夹)的校验和?最好,我想得到sha512值。
在巴斯,我可以这样做:
find /tmp/examplefolder -type f -print | xargs cat | shasum -a 512
...however,可以用自己的版本替换shasum命令,并撤消我想要做的事情。
背景:
我正在为我的OSX应用程序的GUI使用本机OSX小部件。这从file://中从一个名为MyApp.app/Resources/html的文件夹中提取出来。为了抵抗一些恶意侵入MyApp.app的病毒,我计划有一个带有sha512值的info.plist (当然,这将被加密)。当应用程序引导时,它将计算MyApp.app/Resources/html的MyApp.app/Resources/html值,然后以与我的info.plist值相同的方式对其进行加密,然后比较这两个值以确定它们是否相同。如果没有,则应用程序已被破坏。我将使用对话框通知用户并关闭应用程序。
问题回答
Q1。为了防止篡改Info.plist中保存的值,不需要对其进行加密吗?
A1。是的,在存储在Info.plist中之前,它将被加密。我上面说过了。我可以使用Crypto库处理加密步骤。
Q2。应用程序(资源目录)中的文件没有写权限。如果你加密到哪里你会保存加密密钥吗?- zaph
A2。在编译时,在编译步骤中,我将让一个Bash脚本计算sha512校验和,加密它,并更新Info.plist。
Q3。如果应用程序中的文件无法写入,那么校验和有什么意义呢?- mipadi
A3。我的应用程序不会写回参考资料/html文件夹。它将使用苹果为所有应用程序鼓励的典型用户设置策略来存储会话状态。相反,我担心的是一种病毒,它感染了Resources/html文件夹,用坏的东西取代了它,并使应用程序看起来很正常,但在后台却在做一些有害的事情。这就是校验和可以提供帮助的地方--它可以帮助防止应用程序安装后的篡改。
Q4。我假设询问者没有使用代码签名(出于某种原因),因为代码签名已经涵盖了这一点。- mipadi
A4。如果您问我为什么不只是依赖代码签名--这是因为在应用程序被标记为可信之后,病毒可能会进入Resources/html文件夹并造成破坏。这就是我在应用程序引导时需要校验和机制的原因。
发布于 2016-01-27 17:47:48
您可以使用FileManager方法:
- (NSDirectoryEnumerator<NSURL *> *)enumeratorAtURL:(NSURL *)url includingPropertiesForKeys:(NSArray<NSString *> *)keys options:(NSDirectoryEnumerationOptions)mask errorHandler:(BOOL (^)(NSURL *url, NSError *error))handler例如,请参阅Apple文档中的代码。
或
- (NSArray<NSString *> *)subpathsOfDirectoryAtPath:(NSString *)path error:(NSError *)error要枚举路径中的所有文件,请执行以下操作。
创建一个具有公共密码函数的SHA512实例:
CC_SHA512_Init(CC_SHA256_CTX *c)对于每个文件枚举更新:
CC_SHA512_Update(CC_SHA256_CTX *c, const void *data, CC_LONG len)包括:
CC_SHA512_Final(unsigned char *md, CC_SHA256_CTX *c)不需要加密SHA512输出,因为SHA是一个单向函数.
https://stackoverflow.com/questions/35042903
复制相似问题