我正在制作一个python脚本,该脚本使用用户在使用hashlib的输入中指定的算法对字符串进行哈希处理。在对字符串进行哈希处理之后,无论用户选择哪种哈希算法,我都希望对其执行相同的操作。因此,我想为其创建一个函数,而不是重复代码,但不知道如何根据输入来更改内置的哈希函数。我的代码现在看起来像这样:
current_algorithm = input('Hash algorithm: ')
if current_algorithm == 'md5':
hashed = hashlib.md5(word).hexdigest()
# Execute the same code here
elif current_algorithm == 'sha256':
hashed = hashlib.sha256(word).hexdigest()
# Execute the same code here
elif current_algorithm == 'sha512':
hashed = hashlib.sha512(word).hexdigest()
# Execute the same code here
函数hashlib.algorithm(word).hexdigest()
必须根据用户选择的算法进行更改。例如,如果用户选择sha512,则代码将如下所示:hashlib.sha512(word).hexdigest()
,相反,如果用户选择md5,则代码将如下所示:hashlib.md5(word).hexdigest()
,依此类推。但是,这些行下的代码完全相同,现在我将其重复3次,如果将来我将添加更多算法,可能还会重复多次。因此,如何使一个函数根据用户输入更改算法,而不必重复太多代码?我当时想利用论点,但不知道该如何解决。这是我的想法,但是由于您无法更改内置方法而无法使用:
def func(algorithm):
hashlib.algorithm(word).hexdigest()
# Execute the same code here
if current_algorithm == 'md5':
func(current_algorithm)
elif current_algorithm == 'sha256':
func(current_algorithm)
elif current_algorithm == 'sha512':
func(current_algorithm)
然后,在每个if语句下,我将调用函数,并将用户输入(包含哈希算法)作为参数传递给该函数。
我希望问题很清楚,希望能对您有所帮助!
答案 0 :(得分:1)
使用getattr:
import hashlib
current_algorithm = input('Hash algorithm: ')
try:
hashed = getattr(hashlib, current_algorithm)(word).hexdigest()
except AttributeError:
print('Invalid algorithm choice')
答案 1 :(得分:0)
您也可以像这样从if/else
块中提取通用代码:
current_algorithm = input('Hash algorithm: ')
if current_algorithm == 'md5':
hashed = hashlib.md5(word).hexdigest()
elif current_algorithm == 'sha256':
hashed = hashlib.sha256(word).hexdigest()
elif current_algorithm == 'sha512':
hashed = hashlib.sha512(word).hexdigest()
# Execute the same code here (using hashed variable)