SHA512客户端握手实现
问题描述:
我试图做一个与服务器api交互的hmac实现,我唯一需要去掉的例子是一个python代码片段。不幸的是,我从来没有碰过python,而我的Java有点生疏。SHA512客户端握手实现
蛇皮示例代码包括功能:
handshake = str(hmac.new(secret, hash_data, sha512))
其中秘密被从服务器检索到的解码后的散列被连接到, hash_data是要发送的数据, 和SHA512是“消息摘要”在转换为Java时键入。
我只是想知道是否有一个相当于这个函数的关闭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默认使用)。你很可能不得不调整逻辑,但它是一个很好的起点。