如何用hashlib复现wand的纯像素流SHA-256校验和计算?
问题:用hashlib复现Wand/ImageMagick的图片签名计算结果
我做了两组图片哈希计算操作:
第一组:基于Wand/ImageMagick的计算
使用Wand库计算图片签名:
import wand # 用户自行安装 img = wand.image.Image(filename=f) print(img.signature)
该方式的计算结果与直接在本地Shell调用ImageMagick的结果完全一致:
import subprocess # Python内置模块 cmd = f'identify -format \'%#\' {f}' print(str(subprocess.check_output(cmd, shell=True),'utf-8'))
第二组:基于hashlib的文件哈希计算
直接读取文件内容计算SHA-256哈希:
import hashlib # Python内置模块 sha_256 = hashlib.sha256() sha_256.update(open(f,'rb').read() ) print(sha_256.hexdigest())
结果对比
针对某一JPG文件f,两组方式得到的结果不同:
- 第一组(Wand/ImageMagick)结果:
bcabffbb94896989099e5d2c11989468567a5f9ca46f12aecc2448079b6c77cb - 第二组(hashlib)结果:
6964a03b39bd71d8cff04cf075d008a93cd3a4973c95edf1e6cfa8c1f5eeb3e0
推测原因
hashlib是直接读取文件的全部字节内容(包含元数据、EXIF等额外信息),而Wand/ImageMagick的签名仅基于图片的纯像素流计算。
需求
需要在Python 3.9.0中,仅使用hashlib复现Wand/ImageMagick的计算结果,寻求技术实现方案。
内容的提问来源于stack exchange,提问作者Cbhihe
相关产品推荐
相关产品推荐

