ed2khash计算方法也很简单,wiki上有描述:
eD2k Hash 算法是一种MD4算法的变体。其函数是一个MD4 Hash列表(MD4 Hash List)的MD4根Hash,但与MD4 Hash的结果不同:
文件数据被分区成多个9500KB的chunks块(9728000字节或大约9.28MB)和剩余的一个chunk。每个chunk都要计算128-bit MD4 校验和。如果文件长度正好是9500KB的整倍数,剩余的大小为0的chunk依然存在于Hash列表的末尾。将这些chunk的MD4校验和按顺序联合起来,并使用MD4计算Hash,可得到eD2k Hash。对于仅由一个chunk组成的文件(即文件大小小于9500KB),MD4和eD2k Hash是完全相同的。
import hashlib def cal_ed2k(fp): fp.seek(0) ed2k=hashlib.new('md4') chuck=fp.read(9500*1024) ed2k.update(hashlib.new('md4',chuck).digest()) while(len(chuck)==9500*1024): chuck=fp.read(9500*1024) ed2k.update(hashlib.new('md4',chuck).digest()) hash_ed2k=ed2k.hexdigest() return hash_ed2k |
您必须登录才能发表评论。