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 に答える