2013-04-01 37 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被選擇)'.md5()'所以從hashstring字符串是'hashlib.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()左右,則必須先刪除括號。