1

我正在尝试制作一个与服务器 api 交互的 hmac 实现,而我必须使用的唯一示例是 python 片段。不幸的是,我从未接触过 python,而且我的 Java 有点生疏。

python示例代码包括函数:

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

其中secret 是从连接的服务器检索到的解码散列,hash_data 是要发送的数据,sha512 是转换为Java 时的“MessageDigest”类型。

我只是想知道是否有与此功能等效的接近 Java。它似乎应该在 Java.Security 类中,但我无法找到 hmac 函数和实现。

4

1 回答 1

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 默认使用它)。您很可能必须调整逻辑,但这是一个很好的起点。

于 2013-04-17T16:51:19.740 回答