swift: SHA1 из файла без копирования в оперативную память

Я загружаю файл (~ 300 МБ) с помощью Alamofire. После загрузки и сохранения мне нужно вычислить и сравнить SHA1 из этого файла, поэтому я делаю так:

let data = Data(contentsOf: url)
let sha1 = data.sha1

Это порождает проблему. Все байты копируются в оперативную память. Как я могу этого избежать?

функция для расчета:

extension Data {
    func sha1() -> String {
        var digest = [UInt8](repeating: 0, count:Int(CC_SHA1_DIGEST_LENGTH))
        self.withUnsafeBytes {
            _ = CC_SHA1($0, CC_LONG(self.count), &digest)
        }
        let hexBytes = digest.map { String(format: "%02hhx", $0) }
        return hexBytes.joined()
    }
}

person kerstin    schedule 08.05.2017    source источник
comment
Взгляните на Быстрый расчет контрольной суммы MD5 для больших файлов. Тот же подход работает с SHA1 и другими дайджестами.   -  person Martin R    schedule 08.05.2017
comment
Информацию о том, как отображать файлы в виртуальную память, можно найти в документации Apple developer.apple.com/library/content/documentation/   -  person Scott Thompson    schedule 08.05.2017
comment
Я пометил это как обман, так как не вижу смысла перечислять одно и то же решение для каждого хэша (есть 6 дополнительных хэшей SHA-2 и 4 дополнительных хэша SHA-3)   -  person Maarten Bodewes    schedule 08.05.2017
comment
Обратите внимание, что ни MD5, ни SHA-1 больше не считаются безопасными, особенно когда речь идет о хэшировании структур данных (файлов) или генерации подписи. Оба требуют, чтобы столкновения было трудно вычислить.   -  person Maarten Bodewes    schedule 08.05.2017
comment
@MaartenBodewes Я не согласен с твоими действиями. Я ищу решение для алгоритма SHA-1. И было бы здорово, если бы кто-то этим поделился.   -  person Naloiko Eugene    schedule 22.05.2019
comment
Я не согласен. Но не стесняйтесь голосовать за возобновление работы (а не начинать обсуждение в комментариях).   -  person Maarten Bodewes    schedule 23.05.2019