【问题标题】:how to create a sha1 hash in python如何在python中创建一个sha1哈希
【发布时间】:2016-05-27 11:53:17
【问题描述】:

我的目标是在 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 个字符。
  • 你是什么意思switchcase那肯定不是python...
  • sha1 摘要本身是 20 个字节 - 40 个字符的十六进制编码。也许这就是这里的意思。 sha256 是 32 个字节(十六进制的 64 个字符)。不确定应该是 14 - 即使 md5 是 16 字节。
  • 请注意,这些是十六进制值,0x14 为 20,0x20 为 32,因此您期望二进制散列而不是十六进制编码的散列。使用.digest() 而不是.hexdigest() 来获取二进制散列而不是十六进制编码的散列。
  • @domoarrigato switch case在我的c代码中。我正在移植到 python。

标签: python smartcard apdu pyscard


【解决方案1】:

实际上你得到了 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

【讨论】:

    猜你喜欢
    • 2010-09-07
    • 1970-01-01
    • 1970-01-01
    • 2020-03-04
    • 2011-11-26
    • 2011-11-20
    • 2010-12-04
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多