2013-07-30 45 views
3

我正在嘗試使用Java使用HMAC-SHA256對字符串進行編碼。編碼字符串需要匹配由Python使用hmac.new(mySecret, myPolicy, hashlib.sha256).hexdigest()生成的另一組編碼字符串。我曾嘗試可以提供與HMAC-SHA256相同的輸出的Java方法,其格式爲HMAC-SHA256

Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); 
    SecretKeySpec secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA256"); 
    sha256_HMAC.init(secretKey); 

    byte[] hash = sha256_HMAC.doFinal(policy.getBytes()); 
    byte[] hexB = new Hex().encode(hash); 
    String check = Hex.encodeHexString(hash); 
    String sha256 = DigestUtils.sha256Hex(secret.getBytes()); 

後,我把它們打印出來,哈希,HEXB,檢查和SHA256沒有提供相同的結果下面的Python加密方法

hmac.new(mySecret, myPolicy, hashlib.sha256).hexdigest() 

所以,我試着找對於庫或類似於上述Python函數的東西。有人可以幫我嗎?

回答

7

你確定你的密鑰和輸入是相同的,並在Java和Python中正確編碼?

HMAC-SHA256在兩個平臺上的工作原理都是一樣的。

的Java

Mac sha256_HMAC = Mac.getInstance("HmacSHA256"); 
SecretKeySpec secretKey = new SecretKeySpec("1234".getBytes(), "HmacSHA256"); 
sha256_HMAC.init(secretKey); 
byte[] hash = sha256_HMAC.doFinal("test".getBytes()); 
String check = Hex.encodeHexString(hash); 
System.out.println(new String(check)); 

Output 
24c4f0295e1bea74f9a5cb5bc40525c8889d11c78c4255808be00defe666671f 

的Python

print hmac.new("1234", "test", hashlib.sha256).hexdigest(); 

Output 
24c4f0295e1bea74f9a5cb5bc40525c8889d11c78c4255808be00defe666671f 
+0

太感謝你了,解決了這個問題。這是我愚蠢的錯誤,不正確的祕密輸入。 – Takumi

相關問題