1

我有很多行,比如

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>?

4

2 回答 2

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)
于 2012-06-24T16:54:47.853 回答
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)

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

于 2012-06-26T01:34:16.053 回答