将 hmac 函数从 python 转换为 Java

问题描述

我想将以下 python 代码转换为相同的 java 代码。 我不确定如何使用 java 获得相同的结果。 我尝试在 apache 编解码器包中使用 hmacutils,但结果不一样。 蟒蛇代码

import hmac
import hashlib
secret_key = b"NhqPtmdsJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j"
total_params = b"/public/api/ver1/accounts/new?type=binance&name=binance_account&api_key=XXXXXX&secret=YYYYYY"
signature = hmac.new(secret_key,total_params,hashlib.sha384).hexdigest()
print("signature = {0}".format(signature))

解决方法

使用 commons-codec:commons-codec:1.15

final byte[] key = "NhqPtmdSJYdKjVHjA7PZj4Mge3R5YNiP1e3UZjInClVN65XAbvqqM6A7H5fATj0j".getBytes(StandardCharsets.UTF_8);
final Mac initializedMac = HmacUtils.getInitializedMac(HmacAlgorithms.HMAC_SHA_384,key);
final byte[] bytes = "/public/api/ver1/accounts/new?type=binance&name=binance_account&api_key=XXXXXX&secret=YYYYYY".getBytes(StandardCharsets.UTF_8);
initializedMac.update(bytes);
final byte[] digest = initializedMac.doFinal();
System.out.println(Hex.encodeHexString(digest));

给我与那个 python 片段的输出匹配的输出