PHP hash_hmac()带有crypto-js的二进制输出

时间:2018-12-21 08:53:08

标签: javascript cryptojs

我正在使用oauth2-server通过一个应用(expo react native)和一个服务器Laravel 5.1开发一个项目。
现在,我需要使用格式发送授权标头

Mac id="access_token" ts="timestamp" nonce="random_string" mac="signature"

我的问题是signature与来自oauth-server的计算出的签名不匹配。我还比较了签字的所有必要部分(请求URI,主机和端口)。它们是匹配的

我正在尝试使用crypto-js生成编码的base64。结果字符串必须与PHP中hash_hmac()的结果相等。以下是示例

$phpString = base64_encode(
    hash_hmac(
        'sha256', 'ANY STRING', 'HMAC HASH KEY', true
    )
);
// Result: cOeqRLpcqCUyluyY/Y4yROM+5upAr0dFzrSLU/m8qhY=

在我的带有crypto-js的JS脚本中

import CryptoJS from 'crypto-js';
import Base64   from 'crypto-js/enc-base64';

const jsString = Base64.stringify(
    CryptoJS.HmacSHA256('ANY STRING', 'HMAC HASH KEY').toString(CryptoJS.enc.Hex)
);
// 70e7aa44ba5ca8253296ec98fd8e3244e33ee6ea40af4745ceb48b53f9bcaa16
// It is seems not a valid base64 string

我还尝试了其他一些脚本,但没有用

const jsString = CryptoJS.HmacSHA256('ANY STRING', 'HMAC HASH KEY').toString(CryptoJS.enc.Base64);
// cOeqRLpcqCUyluyY/Y4yROM+5upAr0dFzrSLU/m8qhY=

两个结果完全不同。我的JS脚本有什么问题?

0 个答案:

没有答案