我正在尝试制作一个与服务器 api 交互的 hmac 实现,我必须使用的唯一示例是一个 python 片段。不幸的是我从来没有接触过Python并且我的Java有点生疏。
Python示例代码包含以下函数:
handshake = str(hmac.new(secret, hash_data, sha512))
其中,secret 是从所连接的服务器检索到的已解码哈希值, hash_data是要发送的数据, sha512转换为Java后是“MessageDigest”类型。
我只是想知道是否有一个与此函数等效的封闭java。看起来它应该在 Java.Security 类中,但我找不到 hmac 函数和实现。
最佳答案
与密码学相关的 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 默认使用它)。您很可能必须调整逻辑,但这是一个很好的起点。
关于java - SHA512客户端握手实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16065370/