如何在 python 中使用变量作为属性
How to use a variable as an attribute in python
我想编写一个 Python 脚本来暴力破解哈希,允许用户将哈希算法作为字符串插入(结果:algorithm = "md5"
),但是当我尝试像这样使用它时在 hashlib 库中:guess_hash = hashlib.algorithm(bytes(guess)).hexdigest()
,它显然给了我这个错误:AttributeError: module 'hashlib' has no attribute 'algorithm'
所以我做了一个快速的研究,我尝试像这样使用 getattr:getattr(hashlib,guess(bytes(guess1))).hexdigest()
(可能真的错了)它给了我这个错误:TypeError: string argument without an encoding
。
我应该怎么办?在此先感谢您的不便 :)
简单胜于复杂。你可以只拥有一堆 if 语句并在其中进行正确的调用。如果太多,您可以使用哈希图,其中键是一个字符串,值是一个函数。
然而,getattr
是使用变量获取属性的正确调用,但错误告诉您不能在不指定编码的情况下将字符串转换为字节串。 bytes
函数允许您像这样指定编码:
a_byte_string = bytes(a_regular_string, encoding='utf8')
您错过了将实际算法名称传递给 getattr
调用。
试试这个:
getattr(hashlib, 'md5')(bytes(guess)).hexdigest()
这实际上是 bytes
抱怨(Python 3 而不是 Python 2)。看起来您还在 getattr
中交换了 algorithm
和 guess
的含义,并且您会想要做类似
的事情
getattr(hashlib, algorithm)(bytes(guess, 'utf-8')).hexdigest()
我想编写一个 Python 脚本来暴力破解哈希,允许用户将哈希算法作为字符串插入(结果:algorithm = "md5"
),但是当我尝试像这样使用它时在 hashlib 库中:guess_hash = hashlib.algorithm(bytes(guess)).hexdigest()
,它显然给了我这个错误:AttributeError: module 'hashlib' has no attribute 'algorithm'
所以我做了一个快速的研究,我尝试像这样使用 getattr:getattr(hashlib,guess(bytes(guess1))).hexdigest()
(可能真的错了)它给了我这个错误:TypeError: string argument without an encoding
。
我应该怎么办?在此先感谢您的不便 :)
简单胜于复杂。你可以只拥有一堆 if 语句并在其中进行正确的调用。如果太多,您可以使用哈希图,其中键是一个字符串,值是一个函数。
然而,getattr
是使用变量获取属性的正确调用,但错误告诉您不能在不指定编码的情况下将字符串转换为字节串。 bytes
函数允许您像这样指定编码:
a_byte_string = bytes(a_regular_string, encoding='utf8')
您错过了将实际算法名称传递给 getattr
调用。
试试这个:
getattr(hashlib, 'md5')(bytes(guess)).hexdigest()
这实际上是 bytes
抱怨(Python 3 而不是 Python 2)。看起来您还在 getattr
中交换了 algorithm
和 guess
的含义,并且您会想要做类似
getattr(hashlib, algorithm)(bytes(guess, 'utf-8')).hexdigest()