Python:pdf文件与下载对象的哈希



我想检查网络服务器上的pdf内容是否与计算机上的pdf内容相同。我试过这个没有成功:

>>> import requests, hashlib
>>> pdf = requests.get('<http link to pdf file>')
>>> type(pdf.content)
<class 'bytes'>
>>> type(repr(open('file.pdf','rb')).encode('utf-8'))
<class 'bytes'>
>>> hashlib.sha256(repr(open('file.pdf','rb')).encode('utf-8')) == hashlib.sha256(repr(pdf.content).encode('utf-8')).hexdigest()
False
>>> hashlib.sha256(repr(open('file.pdf','rb')).encode('utf-8')) == hashlib.sha256(pdf.content).hexdigest()
False

您正在对文件对象的 UTF-8 编码repr进行哈希处理,而不是对文件的内容进行哈希处理。无论如何,没有理由使用repr;直接对内容进行哈希处理。

>>> with open('file.pdf', 'rb') as f:
...     h1 = hashlib.sha256(f.read()).digest()
>>> h2 = hashlib.sha256(pdf.content).digest()
>>> h1 == h2
True

第一个哈希是文件对象(而不是其内容(表示的哈希:

repr(open('file.pdf','rb'))  
# "<_io.BufferedReader name='file.pdf'>"
repr(open('file.pdf','rb')).encode('utf-8')  
# b"<_io.BufferedReader name='file.pdf'>"

您的第一个哈希值在bytes上:b"<_io.BufferedReader name='file.pdf'>".

最新更新