你这个用法出错了,可以看看 hashlib.md5 的文档说明:
- Methods:
- |
- | update() -- updates the current digest with an additional string
- #使用附加字符串更新当前摘要
- | hexdigest() -- return the current digest as a string of hexadecimal digits
- #将当前摘要返回为十六进制数字的字符串。
复制代码
所以 update() 用于更新一个字符串的摘要,
而hexdigest() 用于返回这个摘要(十六进制的形式)
你这里
- return h.md5().hexdigest()
复制代码
其实返回的是一个空的字符串或者是 None,不管你前面的string是什么参数,返回的值都一样的:
可以看看dis的分析过程:
- import hashlib as h
- def tomd5():
- m = h.md5()
- m.update('I am superman!'.encode('utf-8'))
- str1 = m.hexdigest()
- def tomd52():
- h.md5().update('I am superman!'.encode('utf-8'))
- str1 = h.md5().hexdigest()
- if __name__ == '__main__':
- import dis
- dis.dis(tomd5)
- print('==========================================================')
- dis.dis(tomd52)
复制代码
运行:
- ➜ text python3 0403.py
- 5 0 LOAD_GLOBAL 0 (h)
- 2 LOAD_ATTR 1 (md5)
- 4 CALL_FUNCTION 0
- 6 STORE_FAST 0 (m)
- 6 8 LOAD_FAST 0 (m)
- 10 LOAD_ATTR 2 (update)
- 12 LOAD_CONST 1 ('I am superman!')
- 14 LOAD_ATTR 3 (encode)
- 16 LOAD_CONST 2 ('utf-8')
- 18 CALL_FUNCTION 1
- 20 CALL_FUNCTION 1
- 22 POP_TOP
- 7 24 LOAD_FAST 0 (m)
- 26 LOAD_ATTR 4 (hexdigest)
- 28 CALL_FUNCTION 0
- 30 STORE_FAST 1 (str1)
- 32 LOAD_CONST 0 (None)
- 34 RETURN_VALUE
- ==========================================================
- 10 0 LOAD_GLOBAL 0 (h)
- 2 LOAD_ATTR 1 (md5)
- 4 CALL_FUNCTION 0
- 6 LOAD_ATTR 2 (update)
- 8 LOAD_CONST 1 ('I am superman!')
- 10 LOAD_ATTR 3 (encode)
- 12 LOAD_CONST 2 ('utf-8')
- 14 CALL_FUNCTION 1
- 16 CALL_FUNCTION 1
- 18 POP_TOP
- 11 20 LOAD_GLOBAL 0 (h)
- 22 LOAD_ATTR 1 (md5)
- 24 CALL_FUNCTION 0
- 26 LOAD_ATTR 4 (hexdigest)
- 28 CALL_FUNCTION 0
- 30 STORE_FAST 0 (str1)
- 32 LOAD_CONST 0 (None)
- 34 RETURN_VALUE
复制代码
很明显,tomd52 做了两次的加密运算,但是只有最后一次被返回了值,
可以这样修改:
- import hashlib as h
- def tomd5():
- m = h.md5()
- m.update('I am superman!'.encode('utf-8'))
- str1 = m.hexdigest()
- return str1
- def tomd52():
- #h.md5().update('I am superman!'.encode('utf-8'))
- str1 = h.md5('I am superman!'.encode('utf-8')).hexdigest()
- return str1
- if __name__ == '__main__':
- import dis
- #dis.dis(tomd5)
- #print('==========================================================')
- #dis.dis(tomd52)
- print(tomd5())
- print(tomd52())
复制代码
结果:
- ➜ text python3 0403-1.py
- f1c0ab7b6542e6da7cec10f007f917ba
- f1c0ab7b6542e6da7cec10f007f917ba
复制代码