java相当于python,用于散列
我在java文档中有以下代码(它将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:无效的标
密钥
和数据
作为输入):
在线执行一些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