nodejs里面怎么实现HMAC-SHA1啊?
发布于 10 年前 作者 whw1988 26092 次浏览 最后一次编辑是 8 年前

假设应用密钥为“appSecret”,签名参数列表“foo=1,bar=2,baz=3”,拼接排序后为“bar=2&baz=3&foo=1”,那么,sign的值为BASE64(HMAC-SHA1(“bar=2&baz=3&foo=1”,“appSecret”))。—nodejs里面怎么实现HMAC-SHA1啊?var sign=crypto.createHmac(‘sha1’, app_secret).update(args).digest(“base64”);用这样也不行呢,不知道你是怎么解决的?求回复(在做电信开放平台的短信验证码下发。)

3 回复
        var args="app_id=123&access_token=abc";
        var app_secret="123456";
        var sign=crypto.createHmac('sha1', app_secret).update(args).digest().toString('base64');
        console.log(sign);

nodejs加密后的结果是:n8NDFgg7tMpfojJwUp2Hs+Td9yQ=

可是电信提供的是: 中国电信天翼开放平台客服 11:07:10 1.sign_before =“app_id=123&access_token=abc”

这是即将要编码的字符串

2.b=HmacSHA1(sign_before, app_secret);

第一步:先把字符串用HmacSHA1方式进行编码. 假如app_secret的值设为:”123456”,经过编码后得出的值为:”[B@bfea1d

3.sign_after=BASE64(b)

第二步:把第一步里得到的值进行BAsE64编码:sign_after=BASE64(”[B@bfea1d”) 最后获取得到的值为:”C4Fdpr8vZiRKGR1OlI7CcUmxHMg=”

解决了,crypto.createHmac(‘sha1’, app_secret).update(args).digest().toString(‘base64’); 这样的加密就是hmac-sha1的。之前是因为要加密的参数忘记排序的了。

回到顶部