gpt4 book ai didi

java - Java 中的 HMAC SHA1 签名

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:53:31 30 4
gpt4 key购买 nike

我正在尝试与 TransUnion 网络服务交互,我需要提供 HMAC-SHA1 签名才能访问它。

此示例在 TransUnion 文档中:
具有安全性的 SampleIntegrationOwner2008-11-18T19:14:40.293Z 输入键创建 /UhwvT/kY9HxiXaOjpIc/BarBkc= 的输出。

鉴于该数据和 key ,我无法在 Java 中获得相同的结果。我试过几个在线计算器,也没有一个返回这个结果。他们文档中的示例不正确,还是我没有正确处理这些字符串?

这是我目前正在使用的代码:

public static String calcShaHash (String data, String key) {
String HMAC_SHA1_ALGORITHM = "HmacSHA1";
String result = null;

try {
Key signingKey = new SecretKeySpec(key.getBytes(), HMAC_SHA1_ALGORITHM);
Mac mac = Mac.getInstance(HMAC_SHA1_ALGORITHM);
mac.init(signingKey);
byte[] rawHmac = mac.doFinal(data.getBytes());
result = Base64.encodeBase64String(rawHmac);
}
catch (Exception e) {
e.printStackTrace();
}

return result;
}

这是我的单元测试代码:

@Test
public void testCalcShaHash() {
String data = "SampleIntegrationOwner2008-11-18T19:14:40.293Z";
String key = "xBy/2CLudnBJOxOtDhDRnsDYq9HTuDVr2uCs3FMzoxXEA/Od9tOuwSC70+mIfpjeG68ZGm/PrxFf/s/CzwxF4Q==";
String result = Utils.calcShaHash(data, key);
assertEquals(result, "/UhwvT/kY9HxiXaOjpIc/BarBkc=");

}

最佳答案

这看起来像一个 Base64 编码的 key 。所以我认为您需要对其进行 base64 解码,然后将其传递给 HMAC。像这样的东西(只是为了说明我还没有测试它,任何错误都是读者的练习):

public String getHmacMD5(String privateKey, String input) throws Exception{
String algorithm = "HmacSHA1";
byte[] keyBytes = Base64.decode(privateKey);
Key key = new SecretKeySpec(keyBytes, 0, keyBytes.length, algorithm);
Mac mac = Mac.getInstance(algorithm);
mac.init(key);
return Base64.encode(mac.doFinal(input.getBytes()));
}

关于java - Java 中的 HMAC SHA1 签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10859526/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com