我想允許人們提供一個哈希函數的名稱的數字指紋某些目的的手段:在Python安全評估字符串調用hashlib
def create_ref(obj, hashfn='sha256'):
"""
Returns a tuple of hexdigest and the method used to generate
the digest.
>>> create_ref({}, 'sha1')
('bf21a9e8fbc5a3846fb05b4fa0859e0917b2202f', 'sha1')
>>> create_ref({}, 'md5')
('99914b932bd37a50b983c5e7c90ae93b', 'md5')
"""
return (eval('hashlib.%s' % hashfn)(unicode(obj)).hexdigest(), hashfn)
是硬編碼hashlib
配備充分穩健,以防止濫用的eval
?
這仍然是容易出錯的最小值(調用的任何屬性hashlib)。他應該確保只有「白名單」功能可以被調用。 – gahooa 2010-11-11 22:17:02
@gahooa:這段代碼更EAFP所以如果散列方法不存在,它會引發一個錯誤,這是沒問題:) – mouad 2010-11-11 22:19:16
@gahooa:啊我看到你確實在你的答案中放了一些允許的散列方法嗯,是的好點,但它不是我從OP問題中所理解的:),但仍然很好,你只需完成OP問題並添加了答案:) – mouad 2010-11-11 22:21:09