PHP中的md5函数接受一个可选的第二个参数,如果为真,则返回长度为16而不是正常的32个字符长的哈希。
我们如何使用Python的hashlib.md5
实现相同的功能呢?
PHP中的md5函数接受一个可选的第二个参数,如果为真,则返回长度为16而不是正常的32个字符长的哈希。
我们如何使用Python的hashlib.md5
实现相同的功能呢?
"如果传入第二个参数为true,将返回一个长度为16的较小哈希值,而不是正常的32个字符长的哈希值,这是可选的。"
事实并非如此:第二个参数$raw_output
指定输出是否应以十六进制(hex)编码或作为原始二进制字符串。哈希长度不会改变,而是编码字符串的长度会改变。
import hashlib
digest = hashlib.md5("asdf").digest() # 16 byte binary
hexdigest = hashlib.md5("asdf").hexdigest() # 32 character hexadecimal
第一个哈希值应仅在代码内部使用,不应向用户呈现,因为它将包含无法打印的字符。这就是为什么如果您想向用户呈现哈希值,应始终使用hexdigest
函数的原因。
针对那些尝试在Python 3中获取哈希值的人的说明:
由于Unicode对象必须在使用hashlib
进行哈希之前进行编码,而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