为了账号安全,请及时绑定邮箱和手机立即绑定

使用 JavaScipt 计算 HMAC-SHA256 签名

使用 JavaScipt 计算 HMAC-SHA256 签名

四季花海 2022-06-09 11:19:14
我需要在 JavaScript 中计算 HMAC-sha256 签名。我正在使用以下代码。crypto.createHmac('sha256','abc123').update('{"video-id":"212zpS6bjN77eixPUMUEjR", "exp-time": 1458396066}').digest('hex');console.log( '1458396066' + '~'+ res);我得到的结果哈希是:1458396066~d87d121117b46dc28ffec1117cd44cb114b32c1d7bfe5db30ebee7cb89221d3e这不是我期望的哈希值。我已经用 PHP 和 Java 实现了代码,这似乎工作正常。PHP 代码<?php $videoId = "212zpS6bjN77eixPUMUEjR"; $sharedSecret = "abc123";function generateToken($videoId, $sharedSecret, $lifeTime){$expiryTime = "1458396066";$data = sprintf("{\"video-id\":\"%s\", \"exp-time\": %s}" , $videoId, "1458396066");$hash = hash_hmac ( "sha256", $data , hex2bin($sharedSecret) );$token = sprintf ("%s~%s","1458396066" , $hash);return $token;}$token = generateToken($videoId, $sharedSecret, 5);echo $token;?>JAVA代码import javax.crypto.Mac;import javax.crypto.spec.SecretKeySpec;import javax.xml.bind.DatatypeConverter;import java.math.*;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.time.Duration;import java.time.Instant;import java.time.temporal.ChronoUnit;public class VMProToken {public static void main(String[] args) {    final String videoID = "212zpS6bjN77eixPUMUEjR";    final String sharedSecret = "abc123";    try {        final String token = generateToken(videoID, sharedSecret);        System.out.println(token);    } catch (NoSuchAlgorithmException | InvalidKeyException e) {        e.printStackTrace();    }}}以上两个代码得出的正确答案是1458396066~62dcbe0e20827245454280c51129a9f30d1122eaeafc5ce88f0fec527631f1b5有人可以让我知道我在这里做错了什么吗?
查看完整描述

1 回答

?
jeck猫

TA贡献1909条经验 获得超7个赞

密钥在 PHP 和 Java 代码中被处理为十六进制编码字符串,但在 NodeJS 代码中不被处理。要在 NodeJS 代码中执行相同操作,请在调用中'abc123'替换为。Buffer.from('abc123', 'hex')createHmac



查看完整回答
反对 回复 2022-06-09
  • 1 回答
  • 0 关注
  • 298 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信