gpt4 book ai didi

java - 如何在 Java 中将 HMAC key 指定为十六进制

转载 作者:行者123 更新时间:2023-12-01 19:44:22 26 4
gpt4 key购买 nike

我能够使用以下代码成功获取 HMAC SHA256:

 public static String getHac(String dataUno,  String keyUno) throws InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException {

SecretKey secretKey = null;
Mac mac = Mac.getInstance("HMACSHA256");

byte[] keyBytes = keyUno.getBytes("UTF-8");

secretKey = new SecretKeySpec(keyBytes,mac.getAlgorithm());

mac.init(secretKey);

byte[] text = dataUno.getBytes("UTF-8");

System.out.println("Hex encode: " + Hex.encode(keyUno.getBytes()));

byte[] encodedText = mac.doFinal(text);
return new String(Base64.encode(encodedText)).trim();

}

产生:

HMAC:9rH0svSCPHdbc6qUhco+nlkt2O7HE0rThV4M9Hbv5aY=

但是,我想得到这个:

HMAC:eVXBY4RZmFQcOHHZ5FMRjDLOJ8vCuVGTjy7cHN7pqfo=

我尝试了online tool看来我的代码和在线工具之间的区别在于我正在使用键类型中的文本。

测试值:

字符串数据=“5515071604000fAIkwJtkeiA:APA91bH_Pb5xB2lrmKWUst5xRuJ3joVE-sb9KoT0zXZuupIEfdHjii-coODj-JMnjyy7hFJUbIRAre9o2yaCU43KaFDmxKlhJhE36Dw0bZ2VntDUn _Zd1EJBuSyCYiUtmmkHfRvRy3hIb";

字符串键 =“fc67bb2ee0648a72317dcc42f232fc24f3964a9ebac0dfab6cf47521e121dc6e”;

getHac("5515071604000fAIkwJtkeiA:APA91bH_Pb5xB2lrmKWUst5xRuJ3joVE-sb9KoT0zXZuupIEfdHjii-coODj-JMnjyy7hFJUbIRAre9o2yaCU43KaFDmxKlhJhE36Dw0bZ2VntD Un_Zd1EJBuSyCYiUtmmkHfRvRy3hIb", "fc67bb2ee0648a72317dcc42f232fc24f3964a9ebac0dfab6cf47521e121dc6e"));

我的方法返回的执行

9rH0svSCPHdbc6qUhco+nlkt2O7HE0rThV4M9Hbv5aY=(在线返回与选择的键类型文本相同的值)

我预计

eVXBY4RZmFQcOHHZ5FMRjDLOJ8vCuVGTjy7cHN7pqfo=(在线返回与选择 key 类型十六进制相同的值)

最佳答案

假设您使用的是 Apache Commons Codec 1.11,请使用以下内容:

byte[] keyBytes = Hex.decodeHex(keyUno);

getHac方法

您的代码只需稍加修改,如下所示:

public static String getHac(String dataUno,  String keyUno) 
throws InvalidKeyException, NoSuchAlgorithmException, UnsupportedEncodingException, DecoderException {

SecretKey secretKey;
Mac mac = Mac.getInstance("HMACSHA256");

byte[] keyBytes = Hex.decodeHex(keyUno);

secretKey = new SecretKeySpec(keyBytes, mac.getAlgorithm());

mac.init(secretKey);

byte[] text = dataUno.getBytes("UTF-8");

byte[] encodedText = mac.doFinal(text);
return new String(Base64.encodeBase64(encodedText)).trim();
}

测试

这个 Java 方法给出了预期的结果:

eVXBY4RZmFQcOHHZ5FMRjDLOJ8vCuVGTjy7cHN7pqfo=

关于java - 如何在 Java 中将 HMAC key 指定为十六进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54030949/

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