2012-06-24 21 views
1

는 내가 코드를 단순화하는 기능을 작성하려합니다실제 이름 대신 변수 사용법을 사용하여 GAE 데이터 저장소 속성에 액세스하는 방법은 무엇입니까?

if last_name: 
    person.last_name = hashlib.sha512(last_name + salt).hexdigest() 
if first_name: 
    person.first_name = hashlib.sha512(first_name + salt).hexdigest() 

같은 라인의 번호를 가지고있다.

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) 

경우 :하지만 당신은 개별적으로 셰이의 예에서와 같은 속성을 열거 할 거라면 내가 person.<variablename>?

답변

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) 
+0

'name' 또는'attr_name' 중 하나를 변경하십시오 :) – Lipis

+1

@Lipis Thanks !. –

0

을 사용하는 방법, 훨씬 더 읽기 솔루션은 기능에 단지 추상적 인 코드에있다 당신은 왜 내가 "해시 소금이 잘 못된 해시"라는 함수를 호출하는지 궁금해합니다. 해시를 소금 처리하는 좋은 방법이 아니기 때문입니다. 파이썬 hmac 라이브러리가 제공하는 HMAC와 같은 구조를 사용해야합니다. 누군가의 성과 이름을 해시하는 것은 다소 이상한 일입니다.하지만 보안 목표가 무엇인지 알지 못합니다.

+0

닉, 귀하의 제안에 감사드립니다. 이것은 제가 찾고있는 것이 아니지만, 어쨌든 알고있는 것이 좋습니다. –

+0

@LA_ Shay가 코드를 사용하고 있다면, setattr을 사용할 이유가 전혀 없습니다. –