我有很多行,比如
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>?
我有很多行,比如
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>?
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)
如果您要像 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)
如果您想知道为什么我将函数称为“低盐化哈希”,那是因为这不是对哈希进行盐化的好方法:您应该使用 Pythonhmac
库提供的 HMAC 之类的构造。不过,对某人的名字和姓氏进行散列是相当奇怪的——至少可以这么说,所以我不知道你的安全目标是什么。