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 |
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