如何在Python中创建SHA1哈希

28

我的目标是在Python中使用智能卡执行"哈希签名"。虽然有使用hashlib的方法,但是Python中没有特定的SHA1或SHA256函数。

我的工作:

hash_object = hashlib.sha1(b'HelWorld')
pbHash = hash_object.hexdigest()

但我得到的哈希对象长度为28,而我应该得到14或20,以便可以根据条件进行切换

 switch ( dwHashLen )
{
case 0x14: // SHA1 hash
             call scard transmit
case 0x20: // SHA256 hash
}

非常感谢您的帮助。提前致谢。


哈希对象的长度是什么意思?你从哪里得到了28?SHA1的长度为40个字符。 - Abdul Fatir
“switch”和“case”是什么意思?这肯定不是Python…… - domoarigato
SHA1摘要本身是20字节-40个字符的十六进制编码。也许这就是所说的意思。SHA256是32字节(64个十六进制字符)。不确定14应该是什么-即使MD5也只有16字节。 - domoarigato
1
请注意,这些是十六进制值,其中0x14表示20,0x20表示32,因此您期望的是二进制哈希而不是十六进制编码的哈希。使用.digest()而不是.hexdigest()来获取二进制哈希而不是十六进制编码的哈希。 - Dan D.
@domoarrigato 我的 C 代码中有 switch case。我正在将其移植到 Python 中。 - Swetha
1个回答

45

实际上你得到的是40,它在十六进制中表示为0x28。将哈希值转换为ASCII码,请按照以下步骤进行解码。

>>> import hashlib
>>> hash_object = hashlib.sha1(b'HelWorld')
>>> pbHash = hash_object.hexdigest()
>>> length = len(pbHash.decode("hex"))
>>> print length
20

Dan D所建议的那样,可以直接使用digest替代hexdigest


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