作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为什么无论 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/
我特别从那些IBM/联想、惠普、戴尔(也许)制造的“商务”笔记本电脑的倡导者那里听到“商务用户不需要高质量的屏幕”。他们坚持使用最糟糕的液晶显示器(即使分辨率很高)并且敢于出售那些垃圾。您甚至无法区分
我被这个问题困了两天了,还是没搞定。 基本上,我有一个二维数组,其中包含某些数字(在给定范围内)之间的关系: 0 = 顺序无关紧要 1 = 第一个数字(左栏中的数字)应该是第一个 2 = 第二个数字(
我是一名优秀的程序员,十分优秀!