如何在Python中使用变量作为属性

时间:2019-12-14 18:14:31

标签: python hash hashlib

我想编写一个适用于蛮力哈希的Python脚本,该脚本允许用户将哈希算法作为字符串插入(结果:algorithm = "md5"),但是当我试图在hashlib库中像这样使用它时,{ {1}},显然是给了我这个错误:guess_hash = hashlib.algorithm(bytes(guess)).hexdigest() 因此,我进行了快速研究,并尝试使用这样的getattr:AttributeError: module 'hashlib' has no attribute 'algorithm'(可能真的错了),它给了我这个错误:getattr(hashlib,guess(bytes(guess1))).hexdigest()。 我该怎么办?在此先感谢您,并感谢您的大意:)

3 个答案:

答案 0 :(得分:1)

您错过了将实际的算法名称传递给getattr调用。

尝试一下:

getattr(hashlib, 'md5')(bytes(guess)).hexdigest()

答案 1 :(得分:0)

简单胜于复杂。您可以只有一堆if语句,并在其中执行正确的调用。如果太多,则可以使用哈希图,其中键是字符串,值是函数。

但是,

getattr是使用变量获取属性的正确调用,但是错误告诉您,如果不指定编码,则无法将字符串转换为字节字符串。 bytes函数可让您指定像这样的编码:

a_byte_string = bytes(a_regular_string, encoding='utf8')

答案 2 :(得分:0)

这实际上是bytes的抱怨(Python 3会抱怨,Python 2不会)。看来您在algorithm中也交换了guessgetattr的含义,并且您想做类似的事情

getattr(hashlib, algorithm)(bytes(guess, 'utf-8')).hexdigest()