【问题标题】:Python data/file CrcPython数据/文件CRC
【发布时间】:2009-07-09 10:33:02
【问题描述】:

我想为给定的文件列表生成并存储一个 CRC(或类似的)值,以便以后用作比较。编写一个函数来执行此操作很简单,但是在 Python 库中是否有更标准的方法来执行此操作?

生成的值不需要符合任何特定标准。

【问题讨论】:

    标签: python file md5 crc hashlib


    【解决方案1】:

    推荐hashlib,它为许多不同的安全哈希和消息摘要算法实现了一个通用接口。包括 FIPS 安全散列算法 SHA1 和 MD5。 演示代码:

    import hashlib
    m = hashlib.md5()
    for line in open('data.txt', 'rb'):
        m.update(line)
    print m.hexdigest()
    ##ouput
    1ab8ad413648c44aa9b90ce5abe50eea
    

    【讨论】:

    • @kjfletch,我已经用一个简单的演示代码更新了答案,它逐行更新 md5 以方便系统加载,您可以将此功能与 os.walk 一起使用(docs.python.org/library/os.html#os.walk 有一个示例)根据需要计算每个文件的 md5。
    • @sunqiang: for line in open() 可能(尝试)从二进制文件返回相当长的“行”。使用block = f.read(BLOCKSIZE); m.update(block) 来实现可预测和安全的内存使用可能是个好主意。
    • 这将产生与循环版本相同的输出: with open(path, "r") as f: m = hashlib.md5(f.read())
    【解决方案2】:

    如果您不需要单向安全性,您也可以使用zlib.crc32zlib.adler32,如here 所述。

    【讨论】:

    • 值得注意的是,adler32 运行速度比 crc32 快,但在错误检测方面不如 crc32。如果应用程序是 checksum(file) 附带文件,则不应使用 adler32 -- 它非常适合其目标应用程序:checksum(UNcompressed file) 附带压缩文件。
    猜你喜欢
    • 2010-12-17
    • 2010-09-19
    • 2019-11-25
    • 1970-01-01
    • 2018-03-31
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 2012-06-18
    相关资源
    最近更新 更多