Python:如何使用hashlib.md5算法创建一个16个字符长的摘要?

7

PHP中的md5函数接受一个可选的第二个参数,如果为真,则返回长度为16而不是正常的32个字符长的哈希。

我们如何使用Python的hashlib.md5实现相同的功能呢?

2个回答

15

"如果传入第二个参数为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函数的原因。


5

针对那些尝试在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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接