Python HMAC-SHA1计算错误

时间:2016-07-28 06:38:39

标签: python-2.7

我在使用HMAC-SHA1算法密钥开发安全访问python脚本时陷入了python。

我有python版本2.7,它已经包含HMAC-SHA1库。使用库我尝试以下面提到的方式编写脚本。但不幸的是,当我执行脚本时,计算出的密钥与给我的预期密钥不同。

---------------代码启动--------------------------

from hashlib import sha1
import hmac
import base64
import hashlib, binascii
SecurityConst_key = "121a3ace5827a3b6" #(0x12 1A 3A CE 58 27 A3 B6)
msg = "4272696C6C69616E63655F6175746F21" # Brilliance_auto!
key = hmac.new(SecurityConst_key, msg, sha1).digest()
key = base64.b64encode(key)
print binascii.hexlify(key)

---------------- Code End ----------------------

密钥计算为:4d416963747a41737a546f774530464373536e4d646b6c323972673d

这与最左边的128位不同。

预期的关键是:0x15 4A ED 59 CF B3 2E DC 37 8D 30 6B 0F 02 AB 6B (截断160位结果。输出HMAC的最左边128位,它是Key)

有人可以帮我解决可能的问题。

1 个答案:

答案 0 :(得分:0)

因此,您需要非常小心的是了解某些内容是字节字符串还是十六进制字符串。在python中,大多数加密和mac和sha都采用二进制字符串。所以你的行:

SecurityConst_key = "121a3ace5827a3b6" #(0x12 1A 3A CE 58 27 A3 B6)

不是真的。多数民众赞成0x31 32 31 ...您需要先获取正确的数据。在传入密钥和数据之前,请尝试十六进制解码。" 121a3ace5827a3b6" .decode(" hex")。

另一方面,对于数据,您可以使用原始字符串。

其次,在将其打印为十六进制之前,您还将对mac的输出进行base64编码。这似乎 - 错了。您可以使用它来查看它,或者对它进行十六进制编码,然后查看它。 Base64的设计是ascii-printable(对于传统上以十六进制打印的哈希)