2

有谁知道无需将整个文件加载到内存中即可计算文件的 de SHA-256 哈希的方法?

我将是使用苹果的 CryptoKit 库的理想选择

4

2 回答 2

5

创建一个哈希:

let hasher = SHA256()

对于您读取的每个块(以您想要读取的任何方式或大小),更新散列器:

hasher.update(data: blockOfData)

(或者如果你有一个UnsafeRawBufferPointer,你可以通过它)

完成后,完成它:

let hash = haser.finalize()
于 2021-02-10T19:08:37.103 回答
0

您可以使用 aFileHandle读取块中的数据,并将它们传递到哈希器中:

import CryptoKit

func getSHA256(forFile url: URL) throws -> SHA256.Digest {
    let handle = try FileHandle(forReadingFrom: url)
    var hasher = SHA256()
    while autoreleasepool(invoking: {
        let nextChunk = handle.readData(ofLength: SHA256.blockByteCount)
        guard !nextChunk.isEmpty else { return false }
        hasher.update(data: nextChunk)
        return true
    }) { }
    let digest = hasher.finalize()
    return digest

    // Here's how to convert to string form
    //return digest.map { String(format: "%02hhx", $0) }.joined()
}
于 2021-08-03T04:39:28.277 回答