2017-08-28 43 views
1

我想在Python這行代碼翻譯:HMAC SHA-384在Java中

signature = hmac.new("1234abcd", b64, hashlib.sha384).hexdigest() 

我試圖得到一個字符串的哈希值,使用SHA-384的祕密密鑰。但是,我試圖做這個Java,有誰知道如何做到這一點?

此外,我被要求一個隨機數。對此有什麼要求?

+0

HMAC-SHA-384是不一樣的SHA-384;看到我下面的評論。 –

回答

3

您可以使用MessageDigest與方法字節轉換爲十六進制:

private static final String HMAC_SHA1_ALGORITHM = "HmacSHA384"; 

private static String bytesToHex(final byte[] hash) { 
    final StringBuffer hexString = new StringBuffer(); 
    for (int i = 0; i < hash.length; i++) { 
     final String hex = Integer.toHexString(0xff & hash[i]); 
     if (hex.length() == 1) { 
      hexString.append('0'); 
     } 
     hexString.append(hex); 
    } 
    return hexString.toString(); 
} 

public static void main(final String... args) throws NoSuchAlgorithmException, InvalidKeyException { 
    final String nonce = "nonce"; 
    final String message = "test string"; 
    SecretKeySpec signingKey = new SecretKeySpec(nonce.getBytes(), HMAC_SHA1_ALGORITHM); 
    final Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM); 
    mac.init(signingKey); 
    System.out.println(bytesToHex(mac.doFinal(message.getBytes()))); 
} 
+1

你在哪裏使用鑰匙?十六進制(HMAC_SHA384(base64(有效載荷),key = api_secret))不會佔用一個隨機數。它需要一個有效載荷和一個關鍵。 – Pablo

+0

** HMAC-SHA-384 **不只是SHA-384。請參閱rfc 2104和'javax.crypto.Mac.getInstance(「HmacSHA384」)' –

+0

@ dave_thompson_085那麼這段代碼將無法工作? – Pablo