我正在尝试构建一个为文件计算哈希值的函数。该函数接受参数,文件名和生成的算法:
def getHashValue(fName, Hash):
f = open(fName, 'rb')
hashvalue = hashlib.Hash(f.read()).hexdigest
f.close()
print(fName + str(Hash) + hashvalue)
我的问题是我无法让Hash参数起作用。我的想法是,如果我加上md5,我会得到这个:
hashvalue = hashlib.md5(f.read()).hexdigest
Andy.l
答案 0 :(得分:10)
不要在函数内部使用hashlib。只需将该函数作为参数使用即可。
def getHashValue(fName,Hash):
f = open(fName,'rb')
hashvalue = Hash(f.read()).hexdigest
f.close()
print(fName + str(Hash) + hashvalue)
然后当您调用此函数时,请使用:
getHashValue(filename, hashlib.md5)
如果要从字符串中获取哈希函数,请使用getattr。
hashvalue = getattr(hashlib, Hash)(f.read()).hexdigest
用以下内容打电话给:
getHashValue(filename, 'md5')
答案 1 :(得分:0)
您正在寻找getattr
:
hashvalue = getattr(hashlib, Hash)(f.read()).hexdigest
答案 2 :(得分:0)
您必须将哈希参数作为字符串传递并使用getattr。
像这样:
def getHashValue(fName, hash):
f = open(fName, 'rb')
hashfun = getattr(hashlib, hash) # Here you assign the function to a variable just to simplify
hashvalue = hashfun(f.read()).hexdigest
f.close()
然后你可以打电话: getHashValue(“foo.txt”,“md5”)
你应该得到你想要的结果。但要小心,你应该处理不存在哈希算法的情况(例如你使用“xyz”代替“md5”或其他东西)。
答案 3 :(得分:0)
假设Hash是str,你需要使用“getattr”来获得你想要的功能:
def getHashValue(fName,Hash):
f = open(fName,'rb')
hashvalue = getattr(hashlib,Hash)(f.read()).hexdigest
f.close()
print(fName + str(Hash) + hashvalue)