2017-08-28 99 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