我有很多行,比如
if last_name:
person.last_name = hashlib.sha512(last_name + salt).hexdigest()
if first_name:
person.first_name = hashlib.sha512(first_name + salt).hexdigest()
我想编写一个简化代码的函数。但是我如何使用person.<variablename>?
答案 0 :(得分:2)
def set_hash(entity, name, value):
if value:
setattr(entity, name, hashlib.sha512(value + salt).hexdigest())
set_hash(person, "last_name", last_name)
set_hash(person, "first_name", first_name)
答案 1 :(得分:0)
如果您要像Shay的示例那样单独枚举属性,那么更易读的解决方案就是将代码抽象为函数:
def poorly_salted_hash(value, salt):
return hashlib.sha512(value + salt).hexdigest()
person.first_name = poorly_salted_hash(first_name, salt)
person.last_name = poorly_salted_hash(last_name, salt)
如果你想知道我为什么要调用函数“糟糕的哈希”,那是因为这不是散列哈希值的好方法:你应该使用类似HMAC的构造,它由Python提供{ {1}}库。尽管如此,至少可以说是某个人的名字和姓氏,这是相当奇怪的,所以我不知道你的安全目标是什么。