我设法想出一个代码来计算文件校验和。下面是代码:Python字符串校验和计算器
from Crypto.Hash import *
def get_file_checksum(filename):
h = SHA384.new()
chunk_size = 8192
with open(filename, 'rb') as f:
while True:
chunk = f.read(chunk_size)
if len(chunk) == 0:
break
h.update(chunk)
return h.hexdigest()
现在我想到了另一个函数来计算任何给定字符串的校验和。这里是代码
def get_string_checksum(string):
h = SHA384.new()
h.update(string)
return h.hexdigest()
我面临的问题是字符串校验和的输出不符合文件内容的输出。
对于我的系统上的特定文件,我得到这些值
get_file_checksum(filename)将获得:
d57eec87df9c5ec33baab34be4ac7695a59d80779d10e8920640fac62f4bfa2b0da0cef0b0d7d6d1e16cae5ca560cd95
get_string_checksum(string)将获得:
18044418f40f12e9601d0f15a7da46c114779ac337fd8fe513a122e2aa95a9b5e05d6b00d46d0682c0054c5f2b3355c0
,我使用的字符串的一种说法是与文件的内容相同。
是不是有什么毛病get_string_checksum(string)?
2016-06-14
Drmaposa
+2
检查一下尾部的新生产线。这会使结果完全不同。 –
+0
@jonrsharpe感谢您的及时回复。我检查了文件和字符串,没有任何空白的新行。我甚至用'strip()'来更新代码,例如'h.update(string.strip())'和'h.update(chunk.strip())',但结果仍然不同。 但是,一些奇怪的事情正在发生。如果我打印出文件内容的长度和“h.update(string.strip())'之前的字符串长度,我希望字符串长度是相同的,但也是不同的。 –
+0
它们会产生不同的校验和,因为您从内存中输入字符串。尝试从同一个文件中读取字符串。 –