简单校验和比较脚本疑难解答

2024-10-02 00:35:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个简单的校验和脚本,它检查一个名为tecu.a2l的文件的校验和,并将其与几个.md5文件进行比较,以确保每当此脚本运行时,它们都具有完全相同的校验和。你知道吗

为了让事情更容易理解:

假设tecu.a2l的校验和为1x2x3x,那么md5文件(如果生成正确)应该具有相同的校验和(1x2x3x)。如果其中一个md5文件的校验和与最新的tecu.a2l文件的校验和不同,它将给出一个错误。你知道吗

如果您不太理解我的描述,希望代码可以填补空白。你知道吗

import hashlib
import dst_creator_constants as CONST
import Tkinter

path_a2l = 'C:<path>\tecu.a2l'
md5 = hashlib.md5()
blocks = 65565
with open(path_a2l, 'rb') as a2l:
    readA2L = a2l.read(blocks)
    generatedMD5 = md5.hexdigest()
    print "stop1"

ihx_md5_files = CONST.PATH_DELIVERABLES_DST
for file in ihx_md5_files:
    print "stop2"
    if file.endswith('.md5'):
        print "stop3"
        readMD5 = file.read()
        if compare_checksums:
            print "Yes"
            # Add successful TkInter msg here
        else:
            print "No" 
            # Add error msg here


def compare_checksums(generatedMD5, readMD5):
    if generatedMD5 == readMD5:
        return True
    else:
        return False

当我运行这个脚本时,什么也没发生。没有消息,什么都没有。如果我在cmd中输入python checksum.py,它不会返回任何消息。所以我加入了一些print语句来看看问题所在。问题是stop3从未在命令提示符中显示-这意味着问题与if file.endswith('.md5'):语句有关。你知道吗

我不知道为什么它是罪魁祸首,因为我在以前的脚本中使用了这个file.endswith()语句,我写了一个与此相关的脚本,它在那里起了作用,所以我转向你。你知道吗


Tags: 文件pathimport脚本if语句校验md5
1条回答
网友
1楼 · 发布于 2024-10-02 00:35:01

您没有创建哈希对象。文件保留在readA2L变量中。此外,您的文件可能比您允许的65565字节缓冲区大。尝试像下面的函数一样更新hasher,并让我们知道结果是什么。你知道吗

import hashlib as h
from os.path import isfile

hasher = h.md5()
block_size = 65536


def get_hexdigest(file_path, hasher, block_size):

    if isfile(file_path):
        with open(file_path, 'rb') as f:
            buf = f.read(block_size)

            while len(buf) > 0:
                # Update the hasher until the entire file has been read
                hasher.update(buf)
                buf = f.read(block_size)

        digest = hasher.hexdigest()
    else:
        return None
    return digest

相关问题 更多 >

    热门问题