2013-04-01 2 views
1

사용자 상호 작용을 사용하여 해시 함수를 만들려고합니다. 아이디어는 사용자가 원하는 해시 (예 : md5, sha1 등)를 선택하고 프로그램이 나머지 작업을 수행한다는 것입니다.사용자 상호 작용을 사용하여 hashlib 해시링

내 코드 :

hashstring = "hashlib" + finalHash 

    filePath = open(chosenFile, 'rb') 

    data = filePath.read(8192) 

    if not data: 
     return 

    hashstring.update(data) # The line that causes error 

    return hashstring.hexdigest() 

finalHash이 포함 된 사전에서이다는 '.md5()' 그렇게 hashstring에서 문자열이 'hashlib.md5()입니다 (MD5이 선택 말할 수 있습니다).

내가 오류를 얻을 : AttributeError: 'str' object has no attribute 'update', 오류가 날 뻔한 가리키는 : hashstring가 문자열 (내가 그것을 선언), 제 질문은 간다 : 어떻게 변환하거나 다른 방법으로는 가능한 의도대로해야합니까?

답변

2

당신은 getattr을 사용할 수 입력이 점 또는 괄호를 포함 할 수 없습니다 것을

import hashlib 
chosenFile = '/etc/passwd' 
finalHash = input('Which hash function?') # raw_input in Python 2 
assert finalHash in ['md5', 'sha1'] # Optional 
h = getattr(hashlib, finalHash) 
h.update(open(chosenFile, 'rb').read()) 
print(h.hexdigest()) 

참고. 사용자가 md5() 정도를 입력하도록 허용하려면 먼저 괄호를 제거해야합니다.

관련 문제