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

2024-05-28 19:40:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想写一个Python脚本到bruteforce hashes,允许用户将哈希算法作为字符串插入(结果:algorithm = "md5"),但是当我在hashlib库中尝试这样使用它时,它显然给了我这个错误:AttributeError: module 'hashlib' has no attribute 'algorithm' 所以我做了一个快速的研究,我试着使用getattr如下:getattr(hashlib,guess(bytes(guess1))).hexdigest()(可能真的错了),它给了我这个错误:TypeError: string argument without an encoding。 我该怎么办?提前谢谢,抱歉没时间:)


Tags: no字符串用户脚本算法错误algorithmmd5
3条回答

这实际上是bytes在抱怨(在python3中是这样,但在python2中不是这样)。看起来您还交换了algorithmguessgetattr中的含义,您将要执行以下操作

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

简单胜于复杂。你可以有一堆if语句,并在这些语句中进行正确的调用。如果有太多,可以使用hashmap,其中键是字符串,值是函数。你知道吗

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

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

您没有将实际的算法名称传递给getattr调用。你知道吗

试试这个:

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

相关问题 更多 >

    热门问题