簡體   English   中英

java相當於python for hashing

[英]java equivalent to python for hashing

我在java文檔中有以下代碼(它需要secret_keydata作為輸入):

javax.crypto.Mac mac = javax.crypto.Mac.getInstance("HmacSHA1")
mac.init(new javax.crypto.spec.SecretKeySpec(secret_key.getBytes(), "HmacSHA1"))
byte[] hexBytes = new org.apache.commons.codec.binary.Hex().encode(mac.doFinal(data.getBytes()))
String signature = new String(hexBytes, "UTF-8")

在網上做了一些RnD之后,我寫了等價的python:

decodedKey = secret_key.decode("hex")
hmac_val = hmac.new(decodedKey, data.encode('UTF-8'), hashlib.sha1)
signature = hmac_val.digest().encode('base64')

但是在標題中使用此簽名值進行發布請求時,我得到了

ValueError:無效的標題值'XXXXXXXXXX'

是我的python等效正確嗎? 如果有人能解釋的話會很有幫助!

編輯

Java的

public static void main(String[] args) throws NoSuchAlgorithmException, InvalidKeyException, UnsupportedEncodingException {
        String secret_key = "c84766ca4a3ce52c3602bbf02ad1f7";
        String data = "some data";
        javax.crypto.Mac mac = javax.crypto.Mac.getInstance("HmacSHA1");
        mac.init(new javax.crypto.spec.SecretKeySpec(secret_key.getBytes(), "HmacSHA1"));
        byte[] hexBytes = new org.apache.commons.codec.binary.Hex().encode(mac.doFinal(data.getBytes()));
        String signature = new String(hexBytes, "UTF-8");
        System.out.println("signature : "+signature);
 }

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]:

引用此主題:

Java方法,可以為Hex中的HMAC-SHA256提供與Python方法相同的輸出

sha1小調整,下面簡單等效:

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

pycrypto有一個哈希函數https://pypi.python.org/pypi/pycrypto

因為ValueError:無效的標題值'XXXXXXXXXX'請參閱此主題ValueError:無效的標題值'H2O Python客戶端/ 2.7.9(默認,2015年4月2日,15:33:21)\\ n [GCC 4.9.2]'

也許您帖子中的標題與您用於帖子的庫不兼容

你在python代碼中導入了哪些庫?

如果你想要它很容易嘗試這個: https//pythonhosted.org/pycrypto/Crypto.Hash.HMAC-module.html

也許編碼會影響結果,[UTF-8]然后[base-64]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM