java相当于python,用于散列

java相当于python,用于散列,java,python,hash,hmac,hmacsha1,Java,Python,Hash,Hmac,Hmacsha1,我在java文档中有以下代码(它将密钥和数据作为输入): 在线执行一些RnD之后,我编写了等效的python: decodedKey = secret_key.decode("hex") hmac_val = hmac.new(decodedKey, data.encode('UTF-8'), hashlib.sha1) signature = hmac_val.digest().encode('base64') 但是,在使用这个签名值进行post请求时,我得到 ValueError:无效的标

我在java文档中有以下代码(它将
密钥
数据
作为输入):

在线执行一些RnD之后,我编写了等效的python:

decodedKey = secret_key.decode("hex")
hmac_val = hmac.new(decodedKey, data.encode('UTF-8'), hashlib.sha1)
signature = hmac_val.digest().encode('base64')
但是,在使用这个签名值进行post请求时,我得到

ValueError:无效的标头值“XXXXXXXXX”

我的python等价物正确吗?如果有人能解释,那将是很大的帮助

编辑

爪哇

o/p

signature : 2b565c0476eed0f350ddb3a2852a4cab91281bdc
Python:

In [1]: import hmac

In [2]: import hashlib

In [3]: secret_key = "c84766ca4a3ce52c3602bbf02ad1f7"

In [4]: data = "some data"

In [5]: decodedKey = secret_key.decode("hex")

In [6]: hmac_val = hmac.new(decodedKey, data.encode('UTF-8'), hashlib.sha1)

In [7]: signature = hmac_val.digest().encode('base64')

In [8]: signature
Out[8]: '3qE5SqSdvBEJcy8mSF+srqNXCd4=\n'

In [9]:

pycrypto具有哈希函数

由于ValueError:无效的标头值“XXXXXXXXX”请参阅此线程

也许你文章中的标题与你用于文章的库不兼容


您在python代码中导入了哪些库?

如果您想简单,请尝试以下方法:


可能编码会影响结果,[UTF-8],然后[base-64]

引用此线程:

对于
sha1
,以下是简单的等效项:

In [13]: print hmac.new(secret_key, data, hashlib.sha1).hexdigest()
2b565c0476eed0f350ddb3a2852a4cab91281bdc

犯错误是人类的宽恕:)发布这两个平台的实际输出。我的第一个猜测是,您正在散列的数据在这两个平台上的表示并不相同。为每个答案提供一个相同的预生成字节序列。@chrylis:添加了编辑,请参见获取
ec0e4e884b0056d817efb56ab5920509
作为输出,因此不正确,为什么不编辑现有答案而不是发布新答案?要获得相同的结果,算法必须在位级别(endianness等)以下相等通常,您可以使用调试器(pdb、jdb)逐步完成算法中的每个操作,并查看差异发生的位置。关于javax.crypto(java总是big-endian afaik)的源代码,请参见此线程。当我的语言中存在相同的功能时,为什么我要在程序中使用其他语言?
In [1]: import hmac

In [2]: import hashlib

In [3]: secret_key = "c84766ca4a3ce52c3602bbf02ad1f7"

In [4]: data = "some data"

In [5]: decodedKey = secret_key.decode("hex")

In [6]: hmac_val = hmac.new(decodedKey, data.encode('UTF-8'), hashlib.sha1)

In [7]: signature = hmac_val.digest().encode('base64')

In [8]: signature
Out[8]: '3qE5SqSdvBEJcy8mSF+srqNXCd4=\n'

In [9]:
In [13]: print hmac.new(secret_key, data, hashlib.sha1).hexdigest()
2b565c0476eed0f350ddb3a2852a4cab91281bdc