Swift MD5在同一文件上有所不同

时间:2017-05-08 18:53:37

标签: ios swift md5 md5sum

我在上传到服务器之前,正在为视频文件创建MD5校验和。我遇到的情况是,当我上传相同的文件时,会生成不同的MD5校验和。

我使用以下代码生成校验和

static func md5File(url: URL) -> String? {

    let bufferSize = 1024 * 1024

    do {
        // Open file for reading:
        let file = try FileHandle(forReadingFrom: url)
        defer {
            file.closeFile()
        }

        // Create and initialize MD5 context:
        var context = CC_MD5_CTX()
        CC_MD5_Init(&context)

        // Read up to `bufferSize` bytes, until EOF is reached, and update MD5 context:
        while case let data = file.readData(ofLength: bufferSize), data.count > 0 {
            data.withUnsafeBytes {
                _ = CC_MD5_Update(&context, $0, CC_LONG(data.count))
            }
        }

        // Compute the MD5 digest:
        var digest = Data(count: Int(CC_MD5_DIGEST_LENGTH))
        digest.withUnsafeMutableBytes {
            _ = CC_MD5_Final($0, &context)
        }
        let stringDigest = digest.map { String(format: "%02hhx", $0) }.joined()
        return stringDigest


    } catch {
        return nil
    }
}

我注意到在选择视频文件后iOS会进行压缩,然后我在tmp/目录中给出了一个URL。该文件每次都具有相同的大小,但文件名不同。据我所知,MD5不是基于文件名计算的。我对此是否正确?每次可能导致不同MD5的原因是什么?

0 个答案:

没有答案