gpt4 book ai didi

java - 签署 HmacSHA256 - 算法无关紧要吗?

转载 作者:行者123 更新时间:2023-11-30 07:41:55 25 4
gpt4 key购买 nike

为什么无论 SecretKeySpec 的第二个参数如何,它总是有效?它不应该是一个有效的算法名称吗?谢谢

Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
SecretKeySpec secret_key = new SecretKeySpec(secret.getBytes(), "it does not matter what I put here. why?");
sha256_HMAC.init(secret_key);

String hash = Base64.encodeBase64String(sha256_HMAC.doFinal(message.getBytes()));

问题是:为什么我传递的东西无关紧要?无论我将什么作为第二个参数(算法名称)传递,代码总是能正常工作。

最佳答案

我想这只是巧合,因为 Java 密码体系结构基于 providers 的概念.看起来 Mac 的默认 JDK 提供程序不检查 SecretKeySpec 中的算法,而是完全依赖于保存在 Mac.algorithm 字段中的算法.

您仍然应该在 SecretKeySpec 中设置正确的算法,因为没有什么可以阻止提供商检查 key 的算法。例如,如果您查看 Mac.chooseProvider(Key key, AlgorithmParameterSpec params) 私有(private)方法,它将 key 传递给外部代码:

// if provider says it does not support this key, ignore it
if (s.supportsParameter(key) == false) {
continue;

}

关于java - 签署 HmacSHA256 - 算法无关紧要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55471586/

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