2013-04-17 102 views
1

我試圖做一個與服務器api交互的hmac實現,我唯一需要去掉的例子是一個python代碼片段。不幸的是,我從來沒有碰過python,而我的Java有點生疏。SHA512客戶端握手實現

蛇皮示例代碼包括功能:

handshake = str(hmac.new(secret, hash_data, sha512)) 

其中祕密被從服務器檢索到的解碼後的散列被連接到, hash_data是要發送的數據, 和SHA512是「消息摘要」在轉換爲Java時鍵入。

我只是想知道是否有一個相當於這個函數的關閉java。它似乎應該在Java.Security類中,但我無法找到hmac函數和實現。

回答

2

與密碼學相關的API和函數存在於javax.crypto而不是java.security中。

我不知道Python,但鑑於你的描述和顯示的方法的文檔,你想沿着這些路線的東西:

final Charset charset = Charset.forName("ASCII"); 
final String secret = "mykey"; 
final String data = "A message to be turned to gibberish"; 
final String algorithm = "HmacSHA512"; 

byte[] keyBytes = secret.getBytes(charset); 
SecretKeySpec signingKey = new SecretKeySpec(keyBytes, algorithm); 

Mac mac = Mac.getInstance(algorithm); 
mac.init(signingKey); 

byte[] hashed = mac.doFinal(data.getBytes(charset)); 
System.out.println(new String(hashed, charset)); 

的代碼假定字節字符串轉換是基於ASCII(其我相信Python默認使用)。你很可能不得不調整邏輯,但它是一個很好的起點。