【发布时间】:2021-08-03 12:45:57
【问题描述】:
我有许多文件将保存在服务器上。用户可以在设备上创建这些类型的文件(plist),然后将其上传到所述服务器(CloudKit)。我想通过内容来区分它们(独特的方法应该能够适应创建日期的变化)。我的理解是我应该对这些文件进行哈希处理,以便为它们获取唯一的文件名。我的问题是:
- 我的理解是否正确,我想要的是一个哈希函数?
- 我应该使用哪个函数(来自 CommonCrypto)。
- 我需要的是摘要吗?
- 我将如何在代码中处理它? (我认为这应该在 NSData 实例上进行散列?)。我通过谷歌搜索的理解是我需要一个桥接头,但除此之外,CommonCrypto 的使用让我感到困惑。如果有使用第一方 API(Apple)的更简单方法,我会全力以赴(我想尽可能避免使用第三方代码)。
非常感谢!
【问题讨论】:
-
大警告。哈希函数不会生成唯一标识符。碰撞是可能的,你应该处理它。
-
@Sulthan 虽然确实可以安全地使用加密哈希来识别文件,但请参阅 Git。
-
@zaph 非常正确。多次讨论了碰撞的可能性。例如,请注意最近的示例,当两个具有相同 SHA1 的不同 PDF 文件破坏了多个 SVN 存储库时。我知道,它是 SHA1 和 SHA256 发生此类事情的可能性要低得多,但它仍然可能发生。如果系统很关键,后果可能很严重。此外,解决冲突通常是微不足道的。在谈到性能时,在大多数情况下计算整个文件(尤其是大二进制文件)的哈希或计算复杂的加密哈希是不可行的。
-
确实,如果哈希不同:完成,如果哈希匹配:将文件与第一个比较失败或结束进行比较。
标签: ios swift hash commoncrypto