【问题标题】:How to create a checksum of a file in python如何在python中创建文件的校验和
【发布时间】:2014-07-20 05:13:15
【问题描述】:

我正在尝试创建文件的校验和并将校验和保存为相同的文件。所以。我监控文件,如果校验和发生变化,那就做点什么。

这是校验和

对于 test.txt

contents: a
checksum: dd18bf3a8e0a2a3e53e2661c7fb53534

我编辑文件:

contents: aa
checksum: dd18bf3a8e0a2a3e53e2661c7fb53534

这是我的代码:

python -c 'import hashlib;print hashlib.md5("test.txt").hexdigest()'

为什么校验和是一样的?

【问题讨论】:

    标签: python checksum


    【解决方案1】:

    为什么校验和是一样的?

    因为您正在计算相同内容 test.txt 的哈希值。

    这是一个通用工具(许多 Linux 和 UNIX 平台上广泛可用的md5sum CLI 工具的克隆),可以很好地适应大文件。

    md5sum.py:

    #!/usr/bin/env python
    
    """Tool to compuete md5 sums of files"""
    
    import sys
    from hashlib import md5
    
    
    def md5sum(filename):
        hash = md5()
        with open(filename, "rb") as f:
            for chunk in iter(lambda: f.read(128 * hash.block_size), b""):
                hash.update(chunk)
        return hash.hexdigest()
    
    
    def main():
        if len(sys.argv) < 2:
            print "Usage: md5sum <filename>"
            raise SystemExit(1)
    
        print md5sum(sys.argv[1])
    
    
    if __name__ == "__main__":
        main()
    

    借用自:https://bitbucket.org/prologic/tools/src/tip/md5sum

    【讨论】:

      【解决方案2】:

      你可以试试看hashlib.md5()

      import hashlib
      [(fname, hashlib.md5(open(fname, 'rb').read()).digest()) for fname in fnamelst]
      

      【讨论】:

      • 这不适用于大文件。
      • 不需要大文件。但我改用了 hexdigest() 并且需要尽可能接近我能得到的一个班轮。
      • md5 已损坏,不应使用。
      • @NDEthos 你过于笼统了。是的,它在加密上下文中有弱点,不应该在那里使用。但是在没有潜在攻击者可以尝试制造碰撞的情况下,MD5 仍然非常好。
      猜你喜欢
      • 2017-07-17
      • 1970-01-01
      • 2017-07-01
      • 1970-01-01
      • 2021-10-01
      • 2010-12-04
      • 2013-05-23
      • 2014-08-12
      • 1970-01-01
      相关资源
      最近更新 更多