python md5,d.update(strParam).hexdigest()返回NoneType。=,为什么?

时间:2011-07-01 22:29:15

标签: python md5

>>> d = md5.new()
>>> d.update('a').hexdigest()
Traceback (most recent call last):
  File "<interactive input>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'hexdigest'

这会起作用 -

>>> d = md5.new()
>>> d.update('a')
>>> d.hexdigest()
'0cc175b9c0f1b6a831c399e269772661'

是否有缩短python代码的解释?

3 个答案:

答案 0 :(得分:6)

你可以这样做:

md5.new('a').hexdigest()

documentation

转述
  

new(arg)返回一个新的md5对象。如果arg   存在,方法调用   update(arg)已成就。


md5已被弃用 请改用hashlib

编辑:
md5也存在问题,因此根据您的目的,您可能希望使用更安全的哈希函数,例如: SHA-256:

import hashlib
hashlib.sha256('a').hexdigest()

请注意,SHA-256需要更长的时间来计算,所以如果你有时间限制,这可能不是最佳选择。

答案 1 :(得分:3)

你想要这个:

import hashlib
hashlib.md5('a').hexdigest()

注意:不要使用普通MD5来保证安全。

  • 如果您正在哈希密码,请使用scrypt或bcrypt。
  • 如果您要对消息进行身份验证,请使用HMAC。
  • 如果您正在检查文件完整性,请考虑使用SHA2或更新版本。

答案 2 :(得分:2)

好吧,因为update有“no”返回(Python中的默认返回= None),调用update(arg).<anything>必须失败。有时库会将return self作为方法的最后一行。如果是这种情况,您的第一个代码示例将起作用。

使用分号可以将所有代码放在一行:

d = md5.new(); d.update('a'); d.hexdigest()

但通常不鼓励。