gpt4 book ai didi

Java hmac 算法无法正常工作

转载 作者:行者123 更新时间:2023-12-01 11:12:04 25 4
gpt4 key购买 nike

我有这个代码:

SecretKeySpec keySpec = new SecretKeySpec(
"CnZ3QvfIjYLL0FWDQeY9L+1XLQKv0jtufAqUcXYP9krzAjhYJvOuiAdBZqt9Ogw7".getBytes(),
"HmacSha1");

Mac mac = Mac.getInstance("HmacSha1");
mac.init(keySpec);
byte[] result = mac.doFinal("pesho".getBytes());

String decoded = new String(result);
System.out.println(decoded);
BASE64Encoder encoder = new BASE64Encoder();
System.out.println(encoder.encode(result));

输出:

ё|zЅ!)fЮпFгЅ$‰ж<Т.
Grh8Dnq9ISlm3u9G470kieY80i4=

何时应该输出:

1ab87c0e7abd212966deef46e3bd2489e63cd22e
MWFiODdjMGU3YWJkMjEyOTY2ZGVlZjQ2ZTNiZDI0ODllNjNjZDIyZQ==

为什么会发生这种情况?

最佳答案

它工作正常。它只是返回 byte[] 数组,然后将其转换为 String,但您真正需要的是获取此字节数组的十六进制表示形式。您可以使用 this answer 中的 bytesToHex 方法将字节数组转换为十六进制字符串。 :

SecretKeySpec keySpec = new SecretKeySpec(
"CnZ3QvfIjYLL0FWDQeY9L+1XLQKv0jtufAqUcXYP9krzAjhYJvOuiAdBZqt9Ogw7".getBytes(),
"HmacSha1");

Mac mac = Mac.getInstance("HmacSha1");
mac.init(keySpec);
byte[] result = mac.doFinal("pesho".getBytes());

String decoded = bytesToHex(result).toLowerCase();
System.out.println(decoded);
BASE64Encoder encoder = new BASE64Encoder();
System.out.println(encoder.encode(decoded.getBytes(StandardCharsets.ISO_8859_1)));

这正是您想要的结果。

关于Java hmac 算法无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32231063/

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