如何在python中将变量用作属性

如何在python中将变量用作属性,python,hash,hashlib,Python,Hash,Hashlib,我想为bruteforce哈希编写一个Python脚本,允许用户将哈希算法作为字符串插入(结果:algorithm=“md5”),但当我试图在hashlib库中这样使用它时:guess\u hash=hashlib.algorithm(bytes(guess)).hexdigest(),它显然给了我这个错误:AttributeError:module'hashlib'没有属性'algorithm' 所以我做了一个快速的研究,并尝试像这样使用getattr:getattr(hashlib,gues

我想为bruteforce哈希编写一个Python脚本,允许用户将哈希算法作为字符串插入(结果:
algorithm=“md5”
),但当我试图在hashlib库中这样使用它时:
guess\u hash=hashlib.algorithm(bytes(guess)).hexdigest(),它显然给了我这个错误:
AttributeError:module'hashlib'没有属性'algorithm'
所以我做了一个快速的研究,并尝试像这样使用getattr:
getattr(hashlib,guess(bytes(guess1))).hexdigest()
(可能真的错了),它给了我这个错误:
TypeError:string参数没有编码。

我该怎么办?提前感谢,抱歉没有必要:)

简单总比复杂好。您可以只使用一组if语句,并在这些语句中执行正确的调用。如果有太多,可以使用hashmap,其中键是字符串,值是函数

然而,
getattr
是使用变量获取属性的正确调用,但是错误告诉您,如果不指定编码,就无法将字符串转换为bytestring。
bytes
函数允许您指定如下编码:

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

您没有将实际的算法名称传递给
getattr
调用

试试这个:

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

这实际上是
bytes
抱怨(Python3会抱怨,但Python2不会)。在
getattr
中,您似乎还交换了
算法
猜测
的含义,您将需要执行以下操作

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