Java 中的 HMAC SHA-384

HMAC SHA-384 in Java

我正在尝试翻译 Python 中的这行代码:

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

我正在尝试使用 SHA-384 获取带有密钥的字符串的哈希值。但是,我正在尝试这样做 Java,有人知道怎么做吗?

此外,我被要求提供随机数。有什么要求吗?

您可以使用 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())));
}