如何在python中创建sha1哈希
我的目标是在python中使用智能卡执行“哈希签名”。虽然使用了hashlib,但python中没有特定的SHA1或SHA256函数。 我的工作:如何在python中创建sha1哈希,python,smartcard,apdu,pyscard,Python,Smartcard,Apdu,Pyscard,我的目标是在python中使用智能卡执行“哈希签名”。虽然使用了hashlib,但python中没有特定的SHA1或SHA256函数。 我的工作: hash_object = hashlib.sha1(b'HelWorld') pbHash = hash_object.hexdigest() 但是我得到的散列对象的长度是28,而我应该得到14或20,这样我就可以根据需要切换条件 switch ( dwHashLen ) { case 0x14: // SHA1 hash
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
}
感谢您的帮助。提前谢谢你你实际上得到了40,十六进制是
0x28
。将十六进制的哈希解码为ASCII,如下所示
>>> import hashlib
>>> hash_object = hashlib.sha1(b'HelWorld')
>>> pbHash = hash_object.hexdigest()
>>> length = len(pbHash.decode("hex"))
>>> print length
20
或者简单地使用
digest
而不是建议的hexdigest
。哈希对象的长度是什么意思?你从哪里得到28分?SHA1的长度是40个字符。你说的switch
和case
是什么意思?这肯定不是python…SHA1摘要本身是20个字节-40个字符的十六进制编码。也许这就是这里的意思。sha256是32个字节(64个十六进制字符)。不确定应该是14-甚至md5也是16字节。请注意,这些是十六进制值,0x14是20,0x20是32,所以您希望的是二进制哈希,而不是十六进制编码的哈希。使用.digest()
而不是.hexdigest()
来获取二进制哈希值,而不是十六进制编码的哈希值。@domoarigato开关大小写在我的c代码中。我正在移植到python。