我正在可可中编写一个小实用程序来计算文件的 MD5、SHA-1 和其他哈希函数。如果理解正确,至少 MD5 算法可以这样实现,我只需要同时加载文件的一小部分——这似乎是个好主意,因为我不想占用所有用户的 RAM,然后一些只是为了计算 10-Gb 存档的哈希值。
如何使用 Cocoa 实现这一目标?
我正在可可中编写一个小实用程序来计算文件的 MD5、SHA-1 和其他哈希函数。如果理解正确,至少 MD5 算法可以这样实现,我只需要同时加载文件的一小部分——这似乎是个好主意,因为我不想占用所有用户的 RAM,然后一些只是为了计算 10-Gb 存档的哈希值。
如何使用 Cocoa 实现这一目标?
NSData
可以对文件进行内存映射,以便底层操作系统(Mac OS 或 iOS)的虚拟内存系统根据需要自动在文件的各个部分中分页。使用NSData
带有options:
参数和NSDataReadingMappedIfSafe
orNSDataReadingMappedAlways
选项的构造函数之一。
要做到这一点而无需内存映射文件,这可能会令人担忧,您将使用NSFileHandle
并读取任何大小的块中的数据,使用-readDataOfLength:
.
您在可可中有三种选择:
我有开源代码显示 ow 在这里使用流:https ://github.com/karelia/KSCrypto/blob/master/KSSHA1Stream.h