Php's md5 function接受一个可选的第二个参数,如果为true,则返回一个较小的长度为16的散列,而不是正常的32个字符的长散列。
我们如何使用python' s hashlib.md5
来完成同样的工作。
答案 0 :(得分:9)
"一个可选的第二个参数,如果为true,则返回一个较小的长度为16的散列,而不是正常的32个字符的长散列。"
不是这样:第二个参数$raw_output
指定输出应该是hexadecimal(十六进制)编码还是原始binary字符串。哈希长度不会改变,而是编码字符串的长度。
import hashlib
digest = hashlib.md5("asdf").digest() # 16 byte binary
hexdigest = hashlib.md5("asdf").hexdigest() # 32 character hexadecimal
第一个应该只在代码中使用,而不是呈现给用户,因为它将包含不可打印的字符。这就是为什么如果要向用户呈现哈希值,应始终使用hexdigest
函数。
答案 1 :(得分:0)
为那些试图在Python 3中获取哈希值的人提供的注释
因为在使用hashlib
进行散列之前必须先对Unicode对象进行编码,并且由于Python 3中的字符串默认为Unicode(与Python 2不同),所以您需要使用.encode
方法对字符串进行编码。使用上面的示例,并假设使用utf-8编码:
import hashlib
digest = hashlib.md5("asdf".encode("utf-8")).digest() # 16 byte binary
hexdigest = hashlib.md5("asdf".encode("utf-8")).hexdigest() # 32 character hexadecimal