有老哥懂 Java 和 node.js 嘛, help

2022-09-22 10:32:08 +08:00
 EddieWang

hmac = crypto.createHmac('sha1', config.github.secret); hmac.update(JSON.stringify(payload)); calculatedSignature = 'sha1=' + hmac.digest('hex'); 这段 node.js 有老哥知道怎么写成 java 的嘛,我也去官网看了这段的说明,就说是加料实际上是咋运行的不太清楚(不搞 node.js ,不是很懂)我用 java 写了一下实际上的运行结果和这个段的不一样

1610 次点击
所在节点    程序员
8 条回复
Achieve7
2022-09-22 10:41:17 +08:00
// 使用 sha1+salt 的方式创建一个加解密的句柄
hmac = crypto.createHmac('sha1', config.github.secret)
// 把解析成 json 字符串的 payload 传递给句柄
hmac.update(JSON.stringify(payload))
// 用 'sha1' 字符串拼接加密后的 16 进制字符串
calculatedSignature = 'sha1=' + hmac.digest('hex')
EddieWang
2022-09-22 10:56:35 +08:00
我的理解就是:
hmac = crypto.createHmac('sha1', config.github.secret)这段是对 secret 进行加密
hmac.update(JSON.stringify(payload))只是把 payload 解析成字符串传递进去,这里的传递是 hmac 这样的拼接吗,主要就是不太理解这里的传递句柄大概是什么样
hmac.digest('hex')最后把整个字符串解析成 16 进制的字符串?
lmshl
2022-09-22 11:21:42 +08:00
crypto 也是流式计算的接口,比如你需要对整个文件计算 SHA1 的时候就需要分块读取并调用 update ,最后 digest 为 SHA1 摘要值。

等价的 Java 代码应该是 javax.crypto.Mac.getInstance("HmacSHA256")
lmshl
2022-09-22 11:22:51 +08:00
打错了,应该是 javax.crypto.Mac.getInstance("HmacSHA1")
EddieWang
2022-09-22 11:39:19 +08:00
crypto.createHmac('sha1', config.github.secret); 这个里面的 sercret 是怎么回事呢,我看了一下这个 javax.crypto.Mac.getInstance("HmacSHA1")里面除了 algorithm ,还提供了一个叫做 provider 的传参,这个传参我跟了一下是有固定值的,但是这个 sercret 是可以随意传的
EddieWang
2022-09-22 15:37:13 +08:00
相关实现:
final SecretKeySpec secretKeySpec = new SecretKeySpec(str.getBytes(StandardCharsets.UTF_8),"HmacSHA1");
final Mac hmac = Mac.getInstance("HmacSHA1");
hmac.init(secretKeySpec);
hmac.update(data.getBytes(StandardCharsets.UTF_8));
byte[] result = hmac.doFinal();
log.warn("sha1={}",byteArrToHex(result));
lmshl
2022-09-22 15:37:50 +08:00
void init(Key key, AlgorithmParameterSpec params)
Initializes this Mac object with the given key and algorithm parameters.
@EddieWang
EddieWang
2022-09-22 16:13:29 +08:00
@lmshl 老哥谢啦 已经搞定了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/882065

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX